#include <bits/stdc++.h>
using namespace std;
const long long N = 2e5 + 10;
long long n;
long long root;
long long ch[N * 30][2], tot;
long long a[N];
long long L[N * 30], R[N * 30];
void insert(long long &rt, long long id, long long d) {
  if (!rt) rt = ++tot;
  if (!L[rt]) L[rt] = id;
  R[rt] = id;
  if (d == -1) return;
  insert(ch[rt][a[id] >> d & 1], id, d - 1);
}
long long query(long long rt, long long x, long long d) {
  if (d == -1) return 0;
  long long t = x >> d & 1;
  if (ch[rt][t])
    return query(ch[rt][t], x, d - 1);
  else
    return query(ch[rt][t ^ 1], x, d - 1) + (1 << d);
}
long long dfs(long long rt, long long d) {
  if (d == -1) return 0;
  if (ch[rt][0] && ch[rt][1]) {
    long long ans = 0x3f3f3f3f;
    for (long long i = L[ch[rt][0]]; i <= R[ch[rt][0]]; i++) {
      ans = min(ans, query(ch[rt][1], a[i], d - 1) + (1 << d));
    }
    return dfs(ch[rt][0], d - 1) + dfs(ch[rt][1], d - 1) + ans;
  } else if (ch[rt][0])
    return dfs(ch[rt][0], d - 1);
  else if (ch[rt][1])
    return dfs(ch[rt][1], d - 1);
  return 0;
}
signed main() {
  scanf("%lld", &n);
  for (long long i = 1; i <= n; i++) scanf("%lld", &a[i]);
  sort(a + 1, a + n + 1);
  for (long long i = 1; i <= n; i++) insert(root, i, 30);
  printf("%lld\n", dfs(root, 30));
}
