func_code_string: #include <bits/stdc++.h>   using namespace std;   int const MAXN = 2e5 + 10;   int n;   int a[MAXN], L[MAXN * 30], R[MAXN * 30];   struct Trie {     int tot = 1;     int trie[MAXN * 30][2];     void insert(int pos) {       int x = 1;       for (int i = 30;; i--) {         int dir = (a[pos] >> i) & 1;         L[x] = min(L[x], pos), R[x] = max(R[x], pos);         if (i < 0) break;         if (!trie[x][dir]) trie[x][dir] = ++tot;         x = trie[x][dir];       }       return;     }     long long query(int x, int now, int dep) {       if (dep < 0) return 0ll;       int dir = (x >> dep) & 1;       if (trie[now][dir])         return query(x, trie[now][dir], dep - 1);       else         return query(x, trie[now][dir ^ 1], dep - 1) + (1ll << dep);     }     long long dfs(int now, int dep) {       if (dep < 0) return 0;       if (trie[now][0] && trie[now][1]) {         long long ans = 1ll << 30;         for (int i = L[trie[now][0]]; i <= R[trie[now][0]]; i++) {           ans = min(ans, (long long)query(a[i], trie[now][1], dep - 1));         }         ans += dfs(trie[now][0], dep - 1);         ans += dfs(trie[now][1], dep - 1);         ans += (1 << dep);         return ans;       } else if (trie[now][0]) {         return dfs(trie[now][0], dep - 1);       } else if (trie[now][1]) {         return dfs(trie[now][1], dep - 1);       }       return 0ll;     }   } trie;   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) scanf( %d , &a[i]);     sort(a + 1, a + n + 1);     memset(L, 0x3f, sizeof(L));     for (int i = 1; i <= n; i++) trie.insert(i);     printf( %lld n , trie.dfs(1, 30));     return 0;   }   