#include<bits/stdc++.h> //NeOWami
using namespace std;
#define ft first
#define sc second
#define int long long
using pii = pair<int, int>;
const int N = 2e5 + 5;
const int inf = 1e18;
const int LG = 29;
int n, a[N], ans = 0;
vector<int> comp[N];
int par[N];
int bestW[N], bestV[N], bestU[N];
int findPar(int u) {
if (u == par[u]) return u;
return par[u] = findPar(par[u]);
}
bool joint(int u, int v) {
u = findPar(u);
v = findPar(v);
if (u == v) return 0;
par[v] = u;
return 1;
}
bool vis[N];
struct Node {
int child[2];
int cnt, exist;
};
vector<Node> Trie;
int newNode() {
int id = Trie.size();
Node tmp;
tmp.child[0] = tmp.child[1] = -1;
tmp.cnt = tmp.exist = 0;
Trie.push_back(tmp);
return id;
}
void buildTrie() {
newNode();
}
void addNum(int x, int t) {
int pos = 0;
for (int i = 29; i >= 0; i--) {
Trie[pos].cnt++;
int c = ((x >> i) & 1);
if (Trie[pos].child[c] == -1) {
int id = newNode();
Trie[pos].child[c] = id;
}
pos = Trie[pos].child[c];
}
Trie[pos].cnt++;
Trie[pos].exist = t;
}
void delNum(int x) {
int pos = 0;
for (int i = 29; i >= 0; i--) {
Trie[pos].cnt--;
int c = ((x >> i) & 1);
pos = Trie[pos].child[c];
}
Trie[pos].cnt--;
Trie[pos].exist = 0;
}
int findXor(int x) {
int pos = 0;
for (int i = 29; i >= 0; i--) {
int c = (x >> i & 1);
if (Trie[pos].child[c] == -1 || Trie[Trie[pos].child[c]].cnt == 0) c = (c ^ 1);
if (Trie[pos].child[c] == -1) return 0;
pos = Trie[pos].child[c];
}
return Trie[pos].exist;
}
signed main() {
cin.tie(NULL)->sync_with_stdio(false); cout.tie(NULL);
if (ifstream("XOR.INP")) {
freopen("XOR.INP", "r", stdin);
freopen("XOR.OUT", "w", stdout);
}
cin >> n;
vector<int> tmp(n); for (int i = 1; i <= n; i++) cin >> tmp[i - 1];
sort(tmp.begin(), tmp.end()); tmp.erase(unique(tmp.begin(), tmp.end()), tmp.end());
n = tmp.size();
for (int i = 1; i <= n; i++) a[i] = tmp[i - 1];
//Borůvka
for (int i = 1; i <= n; i++) par[i] = i;
while(1) {
vector<int> roots;
for (int i = 1; i <= n; i++) {
int r = findPar(i);
comp[r].push_back(i);
}
for (int r = 1; r <= n; r++) if (comp[r].size()) roots.push_back(r);
if (roots.size() <= 1) break;
Trie.clear();
buildTrie();
for (int i = 1; i <= n; i++) addNum(a[i], i);
for (int r : roots){
for (int u: comp[r]) delNum(a[u]);
bestW[r] = inf;
for (int u: comp[r]){
int v = findXor(a[u]);
if (v <= 0) continue;
int w = a[u] ^ a[v];
if (w < bestW[r]){
bestW[r] = w;
bestU[r] = u;
bestV[r] = v;
}
}
for (int u: comp[r]) addNum(a[u], u);
}
for (int r: roots) {
comp[r].clear();
if (bestW[r] != inf) {
if (joint(bestU[r], bestV[r])) ans += bestW[r];
}
}
}
cout << ans;
return 0;
}
CiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+IC8vTmVPV2FtaQp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBmdCBmaXJzdAojZGVmaW5lIHNjIHNlY29uZAojZGVmaW5lIGludCBsb25nIGxvbmcKdXNpbmcgcGlpID0gcGFpcjxpbnQsIGludD47CmNvbnN0IGludCBOID0gMmU1ICsgNTsKY29uc3QgaW50IGluZiA9IDFlMTg7CmNvbnN0IGludCBMRyA9IDI5OwoKaW50IG4sIGFbTl0sIGFucyA9IDA7Cgp2ZWN0b3I8aW50PiBjb21wW05dOwppbnQgcGFyW05dOwppbnQgYmVzdFdbTl0sIGJlc3RWW05dLCBiZXN0VVtOXTsKaW50IGZpbmRQYXIoaW50IHUpIHsKICAgIGlmICh1ID09IHBhclt1XSkgcmV0dXJuIHU7CiAgICByZXR1cm4gcGFyW3VdID0gZmluZFBhcihwYXJbdV0pOwp9CmJvb2wgam9pbnQoaW50IHUsIGludCB2KSB7CiAgICB1ID0gZmluZFBhcih1KTsKICAgIHYgPSBmaW5kUGFyKHYpOwogICAgaWYgKHUgPT0gdikgcmV0dXJuIDA7CiAgICBwYXJbdl0gPSB1OwogICAgcmV0dXJuIDE7Cn0KCmJvb2wgdmlzW05dOwpzdHJ1Y3QgTm9kZSB7CiAgICBpbnQgY2hpbGRbMl07CiAgICBpbnQgY250LCBleGlzdDsKfTsKdmVjdG9yPE5vZGU+IFRyaWU7CmludCBuZXdOb2RlKCkgewogICAgaW50IGlkID0gVHJpZS5zaXplKCk7CiAgICBOb2RlIHRtcDsKICAgIHRtcC5jaGlsZFswXSA9IHRtcC5jaGlsZFsxXSA9IC0xOwogICAgdG1wLmNudCA9IHRtcC5leGlzdCA9IDA7CiAgICBUcmllLnB1c2hfYmFjayh0bXApOwogICAgcmV0dXJuIGlkOwp9CnZvaWQgYnVpbGRUcmllKCkgewogICAgbmV3Tm9kZSgpOwp9CnZvaWQgYWRkTnVtKGludCB4LCBpbnQgdCkgewogICAgaW50IHBvcyA9IDA7CiAgICBmb3IgKGludCBpID0gMjk7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgVHJpZVtwb3NdLmNudCsrOwogICAgICAgIGludCBjID0gKCh4ID4+IGkpICYgMSk7CiAgICAgICAgaWYgKFRyaWVbcG9zXS5jaGlsZFtjXSA9PSAtMSkgewogICAgICAgICAgICBpbnQgaWQgPSBuZXdOb2RlKCk7CiAgICAgICAgICAgIFRyaWVbcG9zXS5jaGlsZFtjXSA9IGlkOwogICAgICAgIH0KICAgICAgICBwb3MgPSBUcmllW3Bvc10uY2hpbGRbY107CiAgICB9CiAgICBUcmllW3Bvc10uY250Kys7CiAgICBUcmllW3Bvc10uZXhpc3QgPSB0Owp9Cgp2b2lkIGRlbE51bShpbnQgeCkgewogICAgaW50IHBvcyA9IDA7CiAgICBmb3IgKGludCBpID0gMjk7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgVHJpZVtwb3NdLmNudC0tOwogICAgICAgIGludCBjID0gKCh4ID4+IGkpICYgMSk7CiAgICAgICAgcG9zID0gVHJpZVtwb3NdLmNoaWxkW2NdOwogICAgfQogICAgVHJpZVtwb3NdLmNudC0tOwogICAgVHJpZVtwb3NdLmV4aXN0ID0gMDsKfQppbnQgZmluZFhvcihpbnQgeCkgewogICAgaW50IHBvcyA9IDA7CiAgICBmb3IgKGludCBpID0gMjk7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgaW50IGMgPSAoeCA+PiBpICYgMSk7CiAgICAgICAgaWYgKFRyaWVbcG9zXS5jaGlsZFtjXSA9PSAtMSB8fCBUcmllW1RyaWVbcG9zXS5jaGlsZFtjXV0uY250ID09IDApIGMgPSAoYyBeIDEpOwogICAgICAgIGlmIChUcmllW3Bvc10uY2hpbGRbY10gPT0gLTEpIHJldHVybiAwOwogICAgICAgIHBvcyA9IFRyaWVbcG9zXS5jaGlsZFtjXTsKICAgIH0KICAgIHJldHVybiBUcmllW3Bvc10uZXhpc3Q7Cn0KCgpzaWduZWQgbWFpbigpIHsKICAgIGNpbi50aWUoTlVMTCktPnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNvdXQudGllKE5VTEwpOwogICAgaWYgKGlmc3RyZWFtKCJYT1IuSU5QIikpIHsKICAgICAgICBmcmVvcGVuKCJYT1IuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiWE9SLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGNpbiA+PiBuOwogICAgdmVjdG9yPGludD4gdG1wKG4pOyBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiB0bXBbaSAtIDFdOwogICAgc29ydCh0bXAuYmVnaW4oKSwgdG1wLmVuZCgpKTsgdG1wLmVyYXNlKHVuaXF1ZSh0bXAuYmVnaW4oKSwgdG1wLmVuZCgpKSwgdG1wLmVuZCgpKTsKICAgIG4gPSB0bXAuc2l6ZSgpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBhW2ldID0gdG1wW2kgLSAxXTsKCiAgICAvL0JvcsWvdmthIAogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBwYXJbaV0gPSBpOwogICAgd2hpbGUoMSkgewogICAgICAgIHZlY3RvcjxpbnQ+IHJvb3RzOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICBpbnQgciA9IGZpbmRQYXIoaSk7CiAgICAgICAgICAgIGNvbXBbcl0ucHVzaF9iYWNrKGkpOwogICAgICAgIH0KICAgICAgICBmb3IgKGludCByID0gMTsgciA8PSBuOyByKyspIGlmIChjb21wW3JdLnNpemUoKSkgcm9vdHMucHVzaF9iYWNrKHIpOwogICAgICAgIGlmIChyb290cy5zaXplKCkgPD0gMSkgYnJlYWs7CiAgICAgICAgVHJpZS5jbGVhcigpOwogICAgICAgIGJ1aWxkVHJpZSgpOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgYWRkTnVtKGFbaV0sIGkpOwogICAgICAgIAogICAgICAgIGZvciAoaW50IHIgOiByb290cyl7CiAgICAgICAgICAgIGZvciAoaW50IHU6IGNvbXBbcl0pIGRlbE51bShhW3VdKTsKICAgICAgICAgICAgYmVzdFdbcl0gPSBpbmY7CiAgICAgICAgICAgIGZvciAoaW50IHU6IGNvbXBbcl0pewogICAgICAgICAgICAgICAgaW50IHYgPSBmaW5kWG9yKGFbdV0pOwogICAgICAgICAgICAgICAgaWYgKHYgPD0gMCkgY29udGludWU7CiAgICAgICAgICAgICAgICBpbnQgdyA9IGFbdV0gXiBhW3ZdOwogICAgICAgICAgICAgICAgaWYgKHcgPCBiZXN0V1tyXSl7CiAgICAgICAgICAgICAgICAgICAgYmVzdFdbcl0gPSB3OwogICAgICAgICAgICAgICAgICAgIGJlc3RVW3JdID0gdTsKICAgICAgICAgICAgICAgICAgICBiZXN0VltyXSA9IHY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChpbnQgdTogY29tcFtyXSkgYWRkTnVtKGFbdV0sIHUpOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgcjogcm9vdHMpIHsKICAgICAgICAgICAgY29tcFtyXS5jbGVhcigpOwogICAgICAgICAgICBpZiAoYmVzdFdbcl0gIT0gaW5mKSB7CiAgICAgICAgICAgICAgICBpZiAoam9pbnQoYmVzdFVbcl0sIGJlc3RWW3JdKSkgYW5zICs9IGJlc3RXW3JdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBhbnM7CiAgICByZXR1cm4gMDsKfQoK