#include using namespace std; int n, a[100005], ans; struct node { int val; node* next[2]; ~node() { for (auto i : next) { delete i; } } }; void insert(node* root, int x, int b) { if (!x) { root->val++; return; } if (root->next[(x >> b) & 1] == nullptr) root->next[(x >> b) & 1] = new node(); insert(root->next[(x >> b) & 1], x - (((x >> b) & 1) << b), b - 1); } int search(node* root, int x) { int res = 0; node* p = root; for (int i = 30; i >= 0; i--) { if (p == nullptr) break; if (p->next[!((x >> i) & 1)] != nullptr) { res += 1 << i; p = p->next[!((x >> i) & 1)]; } else { p = p->next[(x >> i) & 1]; } } return res; } int main() { node* root = new node(); cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; insert(root, a[i], 30); } for (int i = 0; i < n; i++) { ans = max(ans, search(root, a[i])); } cout << ans << endl; delete root; return 0; }