#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
using namespace std;
const int MAX = 1e5 + 5;
const int SZ = 1e7 + 6;
long long int tab[MAX];
int sum[SZ];
long long int sufiks[MAX];
long long int prefiks[MAX];
int licznik = 1;
pair<int, int> sons[SZ];
void add(long long int x) {
  int now = 0;
  sum[now]++;
  for (int i = 40; i >= 0; i--) {
    if ((1LL << i) & x) {
      if (sons[now].second == 0) {
        sons[now].second = licznik++;
      }
      now = sons[now].second;
      sum[now]++;
    } else {
      if (sons[now].first == 0) {
        sons[now].first = licznik++;
      }
      now = sons[now].first;
      sum[now]++;
    }
  }
}
long long int maximum(long long int x) {
  int now = 0;
  long long int ans = 0;
  for (int i = 40; i >= 0; i--) {
    if (x & (1LL << i)) {
      if (sons[now].first != 0) {
        now = sons[now].first;
        ans ^= (1LL << i);
      } else {
        now = sons[now].second;
      }
    } else {
      if (sons[now].second != 0) {
        now = sons[now].second;
        ans ^= (1LL << i);
      } else {
        now = sons[now].first;
      }
    }
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  int n;
  cin >> n;
  long long int ans = 0;
  long long int teraz = 0;
  for (int i = 1; i <= n; i++) {
    cin >> tab[i];
    teraz ^= tab[i];
    prefiks[i] = prefiks[i - 1] ^ tab[i];
    ans = max(ans, prefiks[i]);
  }
  for (int i = n; i >= 1; i--) {
    sufiks[i] = sufiks[i + 1] ^ tab[i];
    ans = max(ans, sufiks[i]);
  }
  ans = max(ans, teraz);
  long long int suf = tab[n];
  add(suf);
  teraz ^= tab[n];
  for (int i = n - 1; i >= 1; i--) {
    teraz ^= tab[i];
    ans = max(ans, maximum(teraz));
    suf ^= tab[i];
    add(suf);
  }
  cout << ans;
  return 0;
}
