#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 * 35;
int tree[MAXN], ls[MAXN], rs[MAXN], dp[MAXN], n, tot = 1;
void add(int root, int x, int deep) {
  if (deep == -1) return;
  tree[root]++;
  if (!((x >> deep) & 1)) {
    if (!ls[root]) ls[root] = ++tot;
    add(ls[root], x, deep - 1);
  } else {
    if (!rs[root]) rs[root] = ++tot;
    add(rs[root], x, deep - 1);
  }
}
void dfs(int root, int deep) {
  if (deep == -1) {
    dp[root] = 1;
    return;
  }
  if (ls[root]) dfs(ls[root], deep - 1);
  if (rs[root]) dfs(rs[root], deep - 1);
  if (ls[root] && rs[root])
    dp[root] = max(dp[ls[root]], dp[rs[root]]) + 1;
  else if (ls[root])
    dp[root] = dp[ls[root]];
  else
    dp[root] = dp[rs[root]];
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int tmp;
    scanf("%d", &tmp);
    add(1, tmp, 31);
  }
  dfs(1, 31);
  cout << n - dp[1];
}
