#include <bits/stdc++.h>
using namespace std;
const long long inf = 2e14 + 7;
const int maxN = 1e6 + 5;
const long long MOD = 1e9 + 7;
int occ[maxN], dp[maxN][2];
int arr[maxN];
map<vector<int>, int> m;
int main() {
  ios_base::sync_with_stdio(0);
  int n;
  cin >> n;
  for (int i = (0); i <= ((n)-1); ++i) {
    cin >> arr[i];
  }
  for (int i = (0); i <= (((1 << 15)) - 1); ++i) {
    vector<int> vec;
    for (int j = (0); j <= ((n)-1); ++j) {
      int x = arr[j] ^ i;
      vec.push_back(__builtin_popcount(x % (1 << 15)));
    }
    if (i != 0)
      m[vec] = i;
    else
      m[vec] = -1;
  }
  for (int i = (0); i <= (((1 << 15)) - 1); ++i) {
    vector<int> vec;
    for (int j = (0); j <= ((n)-1); ++j) {
      int x = arr[j] ^ (i * (1 << 15));
      vec.push_back(__builtin_popcount(x >> 15));
    }
    for (int j = (0); j <= ((31) - 1); ++j) {
      for (int k = (0); k <= ((vec.size()) - 1); ++k) {
        vec[k] = j - vec[k];
      }
      if (m[vec]) {
        if (m[vec] == -1)
          cout << (1 << 15) * i;
        else
          cout << (1 << 15) * i + m[vec];
        return 0;
      }
      for (int k = (0); k <= ((vec.size()) - 1); ++k) {
        vec[k] = (-vec[k] + j);
      }
    }
  }
  cout << "-1";
  return 0;
}
