#include "bits/stdc++.h" using namespace std; #define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i)) #define rep(i,j) FOR(i,0,j) #define each(x,y) for(auto &(x):(y)) #define mp make_pair #define all(x) (x).begin(),(x).end() #define debug(x) cout<<#x<<": "<<(x)< pii; typedef vector vi; typedef vector vll; // d桁目以下について、候補aの中から最大値を求める int f(int d, vi a){ if(sz(a) <= 1 || d == -1)return 0; vi b[2]; rep(i, sz(a)){ b[a[i] >> d & 1].push_back(a[i]); } if(sz(b[0]) &&sz(b[1])){ // b[0] またはb[1]のどちらのdビット目を立てるかで最大値が異なる。 return 1 << d | min(f(d - 1, b[0]), f(d - 1, b[1])); } else{ // この桁は必ず0にできる。いずれが最大値候補はそのまま return f(d - 1, a); } } int main(){ vi flag(30); int N; cin >> N; vi a(N); rep(i, N)scanf("%d", &a[i]); // 上の桁から決めていく cout << f(29, a) << endl; }