1.贪心考虑二进制下每个数字的每一位,偶数个的话,那么就不用考虑这一位的分组,怎么分配在答案里这一位都是0
2.只考虑奇数的位,那么答案中一定是 A-B 的形式
假设A>B 那么首先另A=0,那么异或上最大的线性基,并且尽力吧现在的A的非最高位,尽力变成0,因为A和B是一种异或
A变的小的话A,B也会更接近。--->abs(A-B)更小
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
#define en '\n'
#define ll long long
#define maxn 200007
ll d[65],a[maxn];
ll rd() {ll t;scanf("%lld",&t);return t;}
void insert(ll x){
for(int i=62;i>=0;--i){
if((x>>i)&1){
if(!d[i]){
d[i]=x;
break;
}
else x^=d[i];
}
}
}
signed main()
{
#ifdef swt
freopen("input2.txt","r",stdin);
#endif
int T=rd();
#define mem(a,b) memset(a,b,sizeof(a))
while(T--){
mem(d,0);
int n=rd();ll sm=0;
for(int i=1;i<=n;i++){
a[i]=rd();sm^=a[i];
// insert(a[i]);
}
for(int i=1;i<=n;i++){
a[i]&=sm;
insert(a[i]);
}
int index=0;
ll tem=0;
for(int i=62;i>=0;--i){
if(d[i]){
index=i;
tem=d[i];break;
}
}
for(int i=index-1;i>=0;--i){
if(((tem>>i)&1) and d[i]){
tem=tem^d[i];
}
}
cout<<abs(tem-(sm^tem))<<en;
}
return 0;
}