#include <bits/stdc++.h>
#define ll long long
#define mp make_pair
#define F first
#define S second
#define pii pair < int, int >
#define pb push_back
#define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
using namespace std;
const int N = 1e5+10, logA = 30;
int n;
bool cussort( pii a, pii b ) {
return (a.F & ((1<<31) - (1<<(32 - __builtin_clz(a.S))))) < (b.F & ((1<<31) - (1<<(32 - __builtin_clz(b.S)))));
}
ll find_lca(vector < pii >* v ) {
if((int) v->size() == 0) return 0;
vector < pii > v1;
vector < pii > v2;
vector < pii > tempv;
// cout << (int) v->size() << ":\n";
// for(int i = 0; i < (int) v->size(); i++) cout << (*v)[i].F << " " << (*v)[i].S << "\n";
// cout << "\n";
vector < pair < int, ll > > dist_v;
ll out = 0;
for(int i = 0; i < (int) v->size(); i++) {
if((*v)[i] == mp(0, 0)) continue;
if((*v)[i].F > (*v)[i].S) v1.pb((*v)[i]);
else v2.pb(mp((*v)[i].S, (*v)[i].F));
}
sort(v1.begin(), v1.end(), cussort);
sort(v2.begin(), v2.end(), cussort);
int cur = 0;
if((int) v1.size() > 0) cur = (v1[0].F & ((1<<31) - (1<<(32 - __builtin_clz(v1[0].S))) + (v1[0].S == 0 ? 1 : 0)));
for(int i = 0; i < (int) v1.size(); i++) {
if(cur != (v1[i].F & ((1<<31) - (1<<(32 - __builtin_clz(v1[i].S))) + (v1[0].S == 0 ? 1 : 0)))) {
out += find_lca(&tempv);
dist_v.pb(mp((int) tempv.size(), (ll) -cur));
// cout << mp((int) tempv.size(), (ll) -cur).F << " " << mp((int) tempv.size(), (ll) -cur).S << "X\n";
tempv.clear();
cur = (v1[i].F & ((1<<31) - (1<<(32 - __builtin_clz(v1[i].S))) + (v1[0].S == 0 ? 1 : 0)));
}
tempv.pb(mp(v1[i].F - cur, v1[i].S));
}
out += find_lca(&tempv);
if(tempv.size() != 0) dist_v.pb(mp((int) tempv.size(), -cur));
tempv.clear();
reverse(dist_v.begin(), dist_v.end());
dist_v.pb(mp(n - (int) v->size(), 0));
if((int) v2.size() > 0) cur = (v2[0].F & ((1<<31) - (1<<(32 - __builtin_clz(v2[0].S))) + (v2[0].S == 0 ? 1 : 0)));
for(int i = 0; i < (int) v2.size(); i++) {
if(cur != (v2[i].F & ((1<<31) - (1<<(32 - __builtin_clz(v2[i].S))) + (v2[0].S == 0 ? 1 : 0)))) {
out += find_lca(&tempv);
dist_v.pb(mp((int) tempv.size(), cur));
// cout << mp((int) tempv.size(), (ll) -cur).F << " " << mp((int) tempv.size(), (ll) -cur).S << "X\n";
tempv.clear();
cur = (v2[i].F & ((1<<31) - (1<<(32 - __builtin_clz(v2[i].S))) + (v2[0].S == 0 ? 1 : 0)));
}
tempv.pb(mp(v2[i].F - cur, v2[i].S));
}
out += find_lca(&tempv);
if(tempv.size() != 0) dist_v.pb(mp((int) tempv.size(), cur));
tempv.clear();
int visamnt = 0;
int pos = 0;
for(int i = 0; i < (int) dist_v.size(); i++) {
visamnt += dist_v[i].F;
if(visamnt >= (n + 1) / 2 && !pos) pos = i + 1;
}
pos--;
// cout << pos << "\n";
for(int i = 0; i < (int) dist_v.size(); i++) {
out += (ll) dist_v[i].F * abs(dist_v[i].S - dist_v[pos].S);
// cout << dist_v[i].F << " " << dist_v[i].S << "Y\n";
}
// cout << out << "\n\n";
return out;
}
void task( void ) {
cin >> n;
vector < pii > tempv;
pii temp;
for(int i = 0; i < n; i++) {
cin >> temp.F >> temp.S;
tempv.pb(temp);
}
cout << find_lca(&tempv) << "\n";
return;
}
int main( void ) {
// FIO;
int tt = 1;
while(tt--) task();
return 0;
}