#include #include #include #define repeat(i,n) for (int i = 0; (i) < (n); ++(i)) using namespace std; struct tree_t { shared_ptr left, right; }; shared_ptr insert(shared_ptr t, int32_t x, int i) { if (not t) t = make_shared(); if (i == -1) return t; shared_ptr & nt = (x & (1 << i) ? t->right : t->left); nt = insert(nt, x, i-1); return t; } int dfs(shared_ptr const & t, int i) { return not t ? 0 : not t->left ? dfs(t->right, i-1) : not t->right ? dfs(t->left, i-1) : min(dfs(t->left, i-1), dfs(t->right, i-1)) + (1 << i); } int main() { int n; cin >> n; vector a(n); repeat (i,n) cin >> a[i]; shared_ptr root = nullptr; repeat (i,n) root = insert(root, a[i], 31); cout << dfs(root, 31) << endl; return 0; }