#include <iostream>
#include <vector>
#include <cassert>
using namespace std;

int main()
{
    int N; cin>>N;
    vector<long long> x(N), y(N);
    for (int i=0; i<N; i++)
        cin>>x[i]>>y[i];

    //  https://img.atcoder.jp/wtf19-open/editorial.pdf

    //  x[i], y[i] >= 0 とする
    long long base = 1LL<<58;
    for (int i=0; i<N; i++)
    {
        x[i] += base;
        y[i] += base;
    }

    //  直線 y = 0 上のランプのみが点灯するようにしたときに、
    //  x < n, x%3 == r を満たすxについて、 
    //  (x, 0) の点灯しているランプの個数が奇数となるか
    auto count = [&](long long n, long long r) -> bool
    {
        /*
        解説中の「a simple digit DP」について

        求める答えは、
          XOR[0<=p<n, p%3=r](XOR[0<=i<N](y[i] | ~(p-x[i]) の全てのビットが1))。
        変形して、
          = XOR[0<=p<n, p%3=r](XOR[0<=i<N]((~y[i] & (p-x[i])) == 0))
          = XOR[0<=i<N](XOR[0<=p<n, p%3=r]((~y[i] & (p-x[i])) == 0))
          = XOR[0<=i<N](XOR[0<=p<n-x[i], (p-x[i])%3=r]((~y[i] & p) == 0))。
        下記の問題が解ければ良い。
          Q. 整数n, r, yについて、x<n, x%3==r, (~y & x)==0 を満たす整数xは何個か？
        この問題は桁ごとと3での剰余ごとに個数を覚えておく単純な桁DPでたしかに解ける。
        */
        bool ret = false;
        for (int i=0; i<N; i++)
        {
            if (n <= x[i])
                continue;

            long long m = n - x[i] - 1;
            //  [k][r]: k桁以下を比較したときにm以下
            long long A[61][3] = {};
            //  [k][r]: 任意
            long long B[61][3] = {};

            //  0
            A[0][0] = 1LL;
            B[0][0] = 1LL;
            //  1
            if (y[i]&1)
            {
                if (m&1)
                    A[0][1] = 1LL;
                B[0][1] = 1LL;
            }

            for (int k=1; k<=60; k++)
                for (int pr=0; pr<3; pr++)
                {
                    //  0
                    A[k][pr] += m>>k&1 ? B[k-1][pr] : A[k-1][pr];
                    B[k][pr] += B[k-1][pr];
                    //  1
                    if (y[i]>>k&1)
                    {
                        long long cr = (pr + (1LL<<k)) % 3;
                        if (m>>k&1)
                            A[k][cr] += A[k-1][pr];
                        B[k][cr] += B[k-1][pr];
                    }
                }

            if (A[60][((r-x[i])%3+3)%3]%2 != 0)
                ret = !ret;
        }
        return ret;
    };

    //  y = 0 の直線上のランプのみが点灯するようにしたときに、
    //  (p, 0)が点灯しているか
    auto check = [&](long long p) -> bool
    {
        bool ret = false;
        for (int i=0; i<N; i++)
            if ((~y[i] & (p-x[i])) == 0)
                ret = !ret;
        return ret;
    };

    long long r3;
    for (r3=0LL; r3<3LL; r3++)
        if (count(1LL<<60, r3))
            break;
    assert(r3<3LL);

    long long l = 0;
    long long r = 1LL<<60;
    while (r-l > 1LL)
    {
        long long m = (l+r)/2;
        if (count(l, r3) == count(m, r3))
            l = m;
        else
            r = m;
    }

    long long t = l;
    for (int k=60; k>=0; k--)
        if (check(l-(1LL<<k)))
            l -= 1LL<<k;
    r = t;
    for (int k=60; k>=0; k--)
        if (check(r+(1LL<<k)))
            r += 1LL<<k;

    long long ansx = l-base;
    long long ansy = (r-l)-base;

    cout<<ansx<<" "<<ansy<<endl;
}


Measured memory_bytes: 512