#include <bits/stdc++.h>
using namespace std;
long long ans;
int cnt;
int a[200005];
string s[200005];
int ou;
struct node{
int a[2],sum,p;
}trie[2000005];
void add(string s0){
int w=0;
trie[w].p=ou;
for(int i=0;i<s0.length();i++){
int s=trie[w].a[s0[i]-'0'];
if (s==0){
int oi=++cnt;
trie[oi].p=ou,trie[w].a[s0[i]-'0']=oi;
}
else{
if (trie[s].p!=ou) trie[s].a[0]=trie[s].a[1]=trie[s].sum=0,s=++cnt,trie[s].p=ou;
else w=s;
}
}
trie[w].sum++;
}
int q(string s){
int ans=0,w=0,rt=1<<29;
for(int i=0;i<s.length();i++){
int r=s[i]-'0';
r=!r;
if ((rt!=(1<<29)&&w==0)||trie[w].p!=ou||trie[w].a[r]==0||trie[trie[w].a[r]].p!=ou) ans+=rt,w=trie[w].a[!r];
else w=trie[w].a[r];
}
return ans;
}
void dfs(int w,int l,int r){
if (l==r) return;
int po=0;
for(int i=l;i<=r;i++){
if (s[i][w]=='1'){
po=i;
break;
}
}
if (po==0) dfs(w+1,l,r);
else{
ou++;
for(int i=l;i<=po-1;i++){
add(s[i]);
}
int rt=1<<30;
for(int i=po;i<=r;i++){
rt=min(rt,q(s[i]));
}
ans+=rt;
dfs(w+1,l,po-1);
dfs(w+1,po,r);
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
int x=a[i];
string rt;
while(x){
rt+=(x%2+'0');
x/=2;
}
while(rt.length()<30) rt+='0';
for(int j=rt.length()-1;j>=0;j--){
s[i]+=rt[j];
}
}
sort(a+1,a+1+n);
dfs(0,1,n);
cout<<ans<<endl;
return 0;
}