P1016
#include <bits/stdc++.h>
typedef long long i64;
const int N = 5010, inf = 0x3f3f3f3f;
int n;
int t[N], b[N];
int est[N];
bool vis[N];
i64 prim(void) {
i64 ans = 0;
for (int i = 1; i <= n; ++ i) {
est[i] = -1;
vis[i] = false;
}
est[1] = 0;
for (int i = 1; i <= n; ++ i) {
int maxn = -1, id = -1;
for (int j = 1; j <= n; ++ j) {
if (!vis[j]) {
if (maxn < est[j]) {
maxn = est[j];
id = j;
}
}
}
if (id == -1) {
puts("Something was wrong.");
exit(0);
}
ans += maxn;
vis[id] = true;
for (int j = 1; j <= n; ++ j) {
est[j] = std::max(est[j], std::min(t[id] xor b[j], b[id] xor t[j]));
}
}
return ans;
}
int main(void) {
scanf("%d", &n);
for (int i = 1; i <= n; ++ i) {
scanf("%d%d", &t[i], &b[i]);
}
printf("%lld\n", prim());
return 0;
}