模板
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 62;
int n, top;
long long p[65], a[65];
bool zero;
inline void insert (long long x) {
for (int i = MAXN; i >= 0; i --)
if ((x >> i) & 1) {
if (!p[i]) {
p[i] = x;
return;
} else x ^= p[i];
}
zero = 1;
}
inline bool check (long long x) {
for (int i = MAXN; i >= 0; i --)
if ((x >> i) & 1) {
if (!p[i]) return 0;
else x ^= p[i];
}
return 1;
}
inline long long queryMax () {
long long res = 0;
for (int i = MAXN; i >= 0; i --)
res = max(res, res ^ p[i]);
return res;
}
inline long long queryMin () {
if (zero) return 0;
for (int i = 0; i <= MAXN; i ++)
if (p[i]) return p[i];
}
inline void rebuild () {
for (int i = 0; i <= MAXN; i ++) {
for (int j = i - 1; j >= 0; j --)
if ((p[i] >> j) & 1) p[i] ^= p[j];
if (p[i]) a[top ++] = p[i];
}
}
long long query (long long k) {
long long res = 0;
k -= zero;
if (k >= (1ll << top)) return -1;
for (int i = 0; i < top; i ++)
if ((k >> i) & 1) res ^= a[i];
return res;
}
int main () {
scanf("%d", &n);
for (int i = 1; i <= n; i ++) {
long long x;
scanf("%lld", &x);
insert(x);
}
printf("%lld\n", queryMax());
return 0;
}