#include<iostream>
#include<algorithm>

using namespace std;

typedef long long ll;

const int N=100010;

int n;
ll a[N];
ll ans=1e19;

void dfs(ll i,ll pre,ll xo)//x表示当前的位置，我们通过位置去判断是否需要去异或或者或
{                            //pre表示我们当前的答案，xo表示我们前面统计的所以答案的异或起来的数
    if(i>n)
    {
        ans=min(ans,xo^pre);
        return ;
    }
    dfs(i+1,pre|a[i],xo);//这个就是a[i]还没有自立门户，我们就直接或上就行了

    dfs(i+1,a[i],pre^xo);//表示我们a[i]已经自立门户了，我们就去统后面的x0  
                        //就是去统计之前的异或和来方便后面的计算
    
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    

    dfs(1,0,0);
    
    
    cout<<ans;
    return 0;
}
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <deque>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <tuple>
#include <vector>

using namespace std;

typedef long long ll;

#define MOD 1000000007

int main() {
  int n;
  cin >> n;
  vector<ll> a(n);
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
  }
  ll ans = 2e18;
  for (int bit = 0; bit < (1 << n); ++bit) {
    vector<ll> v;
    ll sum = 0;
    for (int i = 0; i < n; ++i) {
      if (bit >> i & 1) {
        v.push_back(sum);
        sum = a[i];
      } else {
        sum |= a[i];
      }
    }
    v.push_back(sum);
    ll res = 0;
    for (int i = 0; i < v.size(); ++i) {
      res ^= v[i];
    }
    ans = min(ans, res);
  }
  cout << ans << endl;
  return 0;
}
