//trie树 + 前缀异或和 + 枚举#include<bits/stdc++.h>#defineendl'\n'#definedeb(x) cout << #x <<" = "<< x <<'\n';#defineINF0x3f3f3f3fusingnamespace std;constint N =2e5+10;int a[N], ls[N], rs[N], lmax[N], lmin[N], rmax[N], rmin[N];int n;int ltre[1<<22][3], rtre[1<<22][3], cnt;voidadd(int x,int tre[][3]){int p =0;for(int i =20; i >=0; i --){int bit =(x >> i)&1;if(tre[p][bit])
p = tre[p][bit];else{
tre[p][bit]=++ cnt;
p = tre[p][bit];}}return;}intquery_max(int x,int tre[][3]){int res =0, p =0;for(int i =20; i >=0; i --){int bit =(x >> i)&1;if(tre[p][!bit]){
p = tre[p][!bit];
res +=(1<< i);}else{
p = tre[p][bit];}}return res;}intquery_min(int x,int tre[][3]){int res =0, p =0;for(int i =20; i >=0; i --){int bit =(x >> i)&1;if(tre[p][bit]){
p = tre[p][bit];}else{
p = tre[p][!bit];
res +=(1<< i);}}return res;}voidsolve(){
cin >> n;for(int i =1; i <= n; i ++){
cin >> a[i];}for(int i =0; i <= n +1; i ++){
lmax[i]= rmax[i]=0;
lmin[i]= rmin[i]= INF;}add(0, ltre);for(int i =1; i <= n; i ++){
ls[i]= ls[i -1]^ a[i];
lmax[i]=max(lmax[i -1],query_max(ls[i], ltre));
lmin[i]=min(lmin[i -1],query_min(ls[i], ltre));add(ls[i], ltre);}
cnt =0;add(0, rtre);for(int i = n; i >=1; i --){
rs[i]= rs[i +1]^ a[i];
rmax[i]=max(rmax[i +1],query_max(rs[i], rtre));
rmin[i]=min(rmin[i +1],query_min(rs[i], rtre));add(rs[i], rtre);}int ans =0;for(int i =1; i <= n -1; i ++){
ans =max(ans,max(lmax[i]- rmin[i +1], rmax[i +1]- lmin[i]));}
cout << ans << endl;}signedmain(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);int t;
t =1;// cin >> t;while(t--)solve();}