inlinevoidInput(){ read(n); for(int i = 1; i <= n; i++) { read(a[i]); } }
int pre[N], suf[N];
int ch[N << 5][2], tot;
inlinevoidClear(){ memset(ch, 0, sizeof(ch)); tot = 1; }
int dp[N];
inlinevoidInsert(int x){ int p = 1; for(int i = 31; i >= 0; i--) { int now = (x >> i) & 1; if(!ch[p][now]) { ch[p][now] = ++tot; } p = ch[p][now]; } }
inlineintQuery(int x){ int p = 1, ans = 0; for(int i = 31; i >= 0; i--) { int now = (x >> i) & 1; if (ch[p][now ^ 1]) { p = ch[p][now ^ 1]; ans += 1LL << i; } else p = ch[p][now]; } return ans; }
inlinevoidWork(){ Clear(); Insert(0); int now = 0; for(int i = 1; i <= n; i++) { now ^= a[i]; Insert(now); pre[i] = max(pre[i - 1], Query(now)); // cout << now << ' '; } Clear(); int ans = 0; Insert(0); now = 0; for(int i = n; i >= 1; i--) { now ^= a[i]; Insert(now); suf[i] = max(suf[i + 1], Query(now)); } for(int i = 1; i < n; i++) { // cout << pre[i] << ' ' << suf[i + 1] << endl; ans = max(ans, pre[i] + suf[i + 1]); } printf("%d\n", ans); }
intmain(){ int T = 1; while(T--) { Input(); Work(); } return0; }