#include <bits/stdc++.h>
const int N = 2e5 + 5;
int n, a[N], ch[N * 20 + 5][2], cnt, root, val[N * 20 + 5];
void add(int x, int &now, int dep) {
  if (now == 0) now = ++cnt;
  val[now]++;
  if (dep < 0) return;
  if (x & (1 << dep)) {
    add(x, ch[now][1], dep - 1);
  } else
    add(x, ch[now][0], dep - 1);
}
int dfs(int x, int dep) {
  if (dep == -1 || x == 0) return val[x];
  int k1 = dfs(ch[x][0], dep - 1), k2 = dfs(ch[x][1], dep - 1);
  if (k1 == 0) return k2;
  if (k2 == 0) return k1;
  if (k2 < k1) std::swap(k1, k2);
  return 1 + k2;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    add(a[i], root, 30);
  }
  printf("%d\n", n - dfs(root, 30));
  return 0;
}
