#528. 宝石碰撞

传统 1000 ms 1024 MiB
标准 IO
文本比较 dd 标签

题目描述

你获得了一串 nn 个宝石,从左到右排成了一行,其中每颗宝石有自己独特的价值,第 ii 颗宝石价值为 viv_i。如果把这串宝石全部卖出去,可以获得所有宝石价值的总和这么多的钱财。

但是聪明的你发现,宝石内部的能量是不稳定的!对于宝石的某个区间 [l,r](l<r)[l,r](l<r),可以从左右两端向内部施加一次碰撞,来改变宝石的能量分布,使得 [l,r][l,r] 内部的所有宝石的价值都变为 vlvrv_l \oplus v_r,其中 \oplus 是二进制异或运算。注意,由于只有一个宝石时无法碰撞,所以要求选择的区间 l<rl<r

你可以任意决定碰撞操作的位置、顺序和次数,请问你能获得的最大价值是多少?

输入格式

第一行,一个整数 tt (1t105)(1\le t\le 10^5),表示测试数据的组数。

对于每组测试数据:

第一行输入一个整数 nn (1n105)(1\le n\le 10^5),表示宝石的个数;第二行包含 nn 个整数 viv_i (1vi<231)(1\le v_i < 2^{31}),表示第 ii 个宝石的价值。

保证所有同一测试点内的 nn 总和不超过 10510^5

输出格式

对每组测试数据,输出一行整数,表示你能获得的最大价值。

样例

输入样例

7
2
1 2
2
6 2
3
3 5 2
4
2 6 4 12
6
15 1 4 8 2 16
2
9 10
3
24 25 13

输出样例

6
8
21
56
186
19
72