#include <bits/stdc++.h>
using namespace std;
long long potencias[42];
struct trie {
  map<int, trie> node;
  trie() {}
  void add(long long n, int id) {
    if (id >= 0) {
      if (n & potencias[id]) {
        node[1].add(n, id - 1);
      } else
        node[0].add(n, id - 1);
    }
  }
  long long match(long long n, int id) {
    if (id >= 0) {
      if (n & potencias[id]) {
        if (node.count(0)) {
          return node[0].match(n, id - 1);
        }
        return node[1].match(n, id - 1) + potencias[id];
      }
      if (node.count(1)) {
        return node[1].match(n, id - 1) + potencias[id];
      }
      return node[0].match(n, id - 1);
    }
    return 0;
  }
};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  trie t;
  t.add(0, 42 - 1);
  potencias[0] = 1;
  for (int i = 1; i < 42; i++) potencias[i] = potencias[i - 1] * 2;
  long long acumulado = 0;
  long long rev = 0;
  long long res = 0;
  int n;
  cin >> n;
  long long l[n];
  for (int i = 0; i < n; i++) {
    cin >> l[i];
    acumulado ^= l[i];
  }
  long long aux = 0;
  for (int i = 0; i < n; i++) {
    aux ^= l[i];
    res = max(res, aux);
  }
  aux = 0;
  for (int i = n - 1; i >= 0; i--) {
    aux ^= l[i];
    res = max(res, aux);
  }
  for (int i = n - 1; i >= 0; i--) {
    long long melhor = t.match(acumulado, 42 - 1);
    res = max(res, acumulado ^ melhor);
    acumulado ^= l[i];
    rev ^= l[i];
    t.add(rev, 42 - 1);
  }
  cout << res << endl;
}
