/*
  Author: Slobodan Mitrovic
  e-mail: boba5555@gmail.com
  date: 31.05.2009.
*/
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#define ffor(_a,_f,_t) for(int _a=(_f),__t=(_t);_a<__t;_a++)
#define all(_v) (_v).begin() , (_v).end()
#define sz size()
#define pb push_back
#define SET(__set, val) memset(__set, val, sizeof(__set))
#define FOR(__i, __n) ffor (__i, 0, __n)

using namespace std;

const int TREE_SIZE = 1 << 17;

bool tree[TREE_SIZE];

void add(int val){
  int idx = 1, bit = 1 << 16;
  FOR (i, 17){
    tree[idx] = true;
    bit >>= 1;
    idx <<= 1;
    idx += ((val & bit) != 0);
  }
}

int read(int val){
  int idx = 1, cld, cb, ob, ret = val, goonB;
  
  int bit = 1 << 15;
  
  FOR (i, 16){
    idx <<= 1;
    cb = (val & bit) != 0; // current bit
    ob = cb ^ 1; // opposite bit
    if (tree[idx + ob])
      goonB = ob;
    else
      goonB = cb;

    idx += goonB;
    ret ^= (goonB * bit);
    
    bit >>= 1;
  }
  
  return ret;
}

unsigned short int s;
bool ex[1 << 16];
int n, a;

int main(){
	freopen("cokoladomat.in", "rt", stdin);
	freopen("cokoladomat.out", "wt", stdout);
	SET(tree, 0);
	SET(ex, 0);
	scanf("%d", &n);
	s = 0;
	add(0);
	int ret = 0;
	FOR (i, n){
    scanf("%d", &a);
    s ^= a;
    if (!ex[s]){
      ex[s] = true;
      ret >?= read(s);
      add(s);
    }
  }
    
  printf("%d\n", ret);
	return 0;
}
