func_code_string: #include <bits/stdc++.h>   using namespace std;   double PI = 3.141592653589793238462643383279;   const double EPS = 1e-9;   const long long MOD = 1000000007;   const int inf = 1 << 30;   const long long linf = 1LL << 60;   int n;   int a[100];   vector<pair<vector<int>, int> > v1, v2;   int main() {     scanf( %d , &n);     for (int i = 0; i < (int)n; i++) scanf( %d , a + i);     for (int i = 0; i < (int)(1 << 15); i++) {       {         int pre = __builtin_popcount((a[0] ^ i) & ((1 << 15) - 1));         vector<int> tmp;         for (int k = 1; k < n; k++) {           int now = __builtin_popcount((a[k] ^ i) & ((1 << 15) - 1));           tmp.push_back(pre - now);           pre = now;         }         v1.push_back(pair<vector<int>, int>(tmp, i));         if (i == 3) {         }       }       {         int pre = __builtin_popcount((a[0] >> 15) ^ i);         vector<int> tmp2;         for (int k = 1; k < n; k++) {           int now = __builtin_popcount((a[k] >> 15) ^ i);           tmp2.push_back(now - pre);           pre = now;         }         v2.push_back(pair<vector<int>, int>(tmp2, i * (1 << 15)));       }     }     sort(v1.begin(), v1.end(),          [](const pair<vector<int>, int>& l, const pair<vector<int>, int>& r) {            for (int i = 0; i < (int)n - 1; i++) {              if (l.first[i] < r.first[i]) return true;              if (l.first[i] > r.first[i]) return false;            }            return l.second < r.second;          });     sort(v2.begin(), v2.end(),          [](const pair<vector<int>, int>& l, const pair<vector<int>, int>& r) {            for (int i = 0; i < (int)n - 1; i++) {              if (l.first[i] < r.first[i]) return true;              if (l.first[i] > r.first[i]) return false;            }            return l.second < r.second;          });     int pos = 0;     for (pair<vector<int>, int>& p : v1) {       while (pos < (int)v2.size()) {         pair<vector<int>, int>& q = v2[pos];         bool ok = true;         bool con = false;         for (int i = 0; i < (int)n - 1; i++) {           if (q.first[i] < p.first[i]) {             pos++;             ok = false;             con = true;             break;           }           if (q.first[i] > p.first[i]) {             ok = false;             break;           }         }         if (ok) {           printf( %d n , p.second + q.second);           return 0;         }         if (!con) break;       }     }     puts( -1 );   }   