// vvvvvvvvvvvv TEMPLATE vvvvvvvvvvvv
#include <bits/stdc++.h>
using namespace std; using ll = long long; using P = pair<ll, ll>;
const ll linf = 1e18; const double eps = 1e-12, pi = acos(-1);
#define FOR(i,a,b) for (ll i=(a),__last_##i=(b);i<__last_##i;i++)
#define RFOR(i,a,b) for (ll i=(b)-1,__last_##i=(a);i>=__last_##i;i--)
#define REP(i,n) FOR(i,0,n)
#define RREP(i,n) RFOR(i,0,n)
#define __GET_MACRO3(_1, _2, _3, NAME, ...) NAME
#define each(i,a) for (auto&& i : a)
#define rep(...) __GET_MACRO3(__VA_ARGS__, FOR, REP)(__VA_ARGS__)
#define rrep(...) __GET_MACRO3(__VA_ARGS__, RFOR, RREP)(__VA_ARGS__)
#define pb push_back
#define eb emplace_back
#define all(a) begin(a),end(a)
#define chmin(x,v) x = min(x, v)
#define chmax(x,v) x = max(x, v)
template<typename T> ll min(ll a, const T&& b) { return a < b ? a : b; }
template<typename T> ll min(const T&& a, ll b) { return a < b ? a : b; }
template<typename T> ll max(ll a, const T&& b) { return a > b ? a : b; }
template<typename T> ll max(const T&& a, ll b) { return a > b ? a : b; }
template<typename Head> void out(Head h) { cout << h << endl; } template<typename Head, typename... Tail>void out(Head h, Tail... t) { cout << h << " "; out(t...); }
template<typename T> istream& operator>>(istream& is, vector<T>& v) { each(x,v) is >> x; return is; }
template<typename T> ostream& operator<<(ostream& os, const vector<T>& v) { rep(i,v.size()) { if (i) os << " "; os << v[i]; } return os; }
ostream& operator<<(ostream& os, const vector<string>& v) { rep(i,v.size()) { if (i) os << endl; os << v[i]; } return os; }
template<typename T> ostream& operator<<(ostream& os, const vector<vector<T>>& v) { rep(i,v.size()) { if (i) os << endl; os << v[i]; } return os; }
template<typename T1, typename T2> ostream& operator<<(ostream& os, const pair<T1, T2>& p) { return os << "(" << p.first << ", " << p.second << ")"; }
struct yes_no : std::numpunct<char> { string_type do_truename() const { return "Yes"; } string_type do_falsename() const { return "No"; } };
void solve(); int main() {
  ios::sync_with_stdio(false); cin.tie(0); locale loc(locale(), new yes_no); cout.imbue(loc); cout << fixed << setprecision(10) << boolalpha;
  solve();
}
// ^^^^^^^^^^^^ TEMPLATE ^^^^^^^^^^^^

ll comb2(ll n, ll r) {
  if (r > n) return 0;
  if (r < 0) return 0;
  rrep(i, 60) {
    ll sz = 1LL<<i;
    if (n >= sz) {
      n -= sz;
      ll len = sz - n - 1;
      if (n < r && r <= n + len) {
        return 0;
      }
      if (r > n) {
        r -= sz;
      }
    }
  }
  return 1;
}

void solve() {
  // ll N = 50;
  // rep(n, N) {
  //   rep(t, N-n-1) {
  //     cout << " ";
  //   }
  //   rep(r, n+1) {
  //     cout << comb2(n, r) << " ";
  //   }
  //   cout << endl;
  // }
  // return;
  ll n; cin >> n;
  vector<P> v;
  rep(i, n) {
    ll x, y; cin >> x >> y;
    v.eb(x, y);
  }
  auto check = [&](ll x, ll y) {
    // cout << "input: " << x << " " << y << endl;
    ll res = 0;
    each(p, v) {
      // cout << x - p.first << " " << p.second - y << " " << comb2(x - p.first, p.second - y) << endl;
      assert(p.second - y >= 0);
      res ^= comb2(p.second - y, x - p.first);
    }
    return res == 1;
  };
  ll Y = -(1LL<<57)+1;
  ll L = -2*Y;
  // ll Y = -3;
  // ll L = 10;
  random_device rnd;
  // cout << comb2(63, -1) << endl;
  // return;
  ll lb = -linf, ub = -linf;
  ll N = 10;
  rep(i, N) {
    // ll x = ll(rnd()) * rnd() % (2*L+1) - L;
    ll x = (2*L+1) * i / N;
    if (check(x, Y)) {
      ub = x;
      break;
    }
  }
  assert(ub > -linf);
  // cout << ub << endl;
  // cout << check(0, Y) << endl;
  // return;
  rep(t, 60) {
    ll mid = (lb + ub) / 2;
    // cout << mid << " " << check(mid, Y) << endl;
    if (check(mid, Y)) {
      ub = mid;
    }
    else {
      lb = mid;
    }
  }
  cout << ub << endl;
}


Measured memory_bytes: 2416