### BUGGY CODE ###

#!/usr/bin/env python3
import sys
INF = float("inf")


B = 10**7+7
MOD = 10**9+7


def contain(T, S):
    # TはSに含まれているか
    if len(T) > len(S):
        return len(S)
    t = 1
    for i in range(len(T)):
        t *= B
        t %= MOD
    th, sh = 0, 0
    for i in range(len(T)):
        th = th*B+T[i]
        th %= MOD
    for i in range(len(T)):
        sh = sh*B+S[i]
        sh %= MOD

    for i in range(len(S)-len(T)):
        if th == sh:
            if T == S[i:i+len(T)]:
                return i
        if i + len(T) < len(S):
            sh = sh*B+S[i+len(T)]-S[i]*t
            sh %= MOD
    return len(S)


def solve(N: int, a: "List[int]", b: "List[int]"):

    K = [True]*N
    for i in range(3):
        a_pat = []
        a_pat2 = []
        b_pat = []
        for n, (aa, bb) in enumerate(zip(a, b)):
            a_pat.append((aa >> i) & 1)
            a_pat2.append(1-((aa >> i) & 1))
            b_pat.append((bb >> i) & 1)
        b_pat = b_pat*2
        cand = [False]*(2*N)
        cand2 = [False]*(2*N)
        j = -1
        while j < N:
            j = j+1+contain(a_pat, b_pat[j+1:])
            if j < 2*N:
                cand[j] = True
        j = -1
        while j < N:
            j = j+1+contain(a_pat2, b_pat[j+1:])
            if j < 2*N:
                cand2[j] = True
        for j in range(N):
            if cand[j] == False and cand2[j] == False:
                K[j] = False
        # print("K", K)

    ans = []
    for i, k in enumerate(K):
        if k == True:
            ans.append(((N-i) % N, b[0] ^ a[(N-i) % N]))
    ans.sort()
    for a, b in ans:
        print(a, b, sep=" ")
    return


def main():

    def iterate_tokens():
        for line in sys.stdin:
            for word in line.split():
                yield word
    tokens = iterate_tokens()
    N = int(next(tokens))  # type: int
    a = [int(next(tokens)) for _ in range(N - 1 - 0 + 1)]  # type: "List[int]"
    b = [int(next(tokens)) for _ in range(N - 1 - 0 + 1)]  # type: "List[int]"
    solve(N, a, b)


if __name__ == '__main__':
    main()


### FIXED CODE ###

#!/usr/bin/env python3
import sys
INF = float("inf")


B = 10**7+7
MOD = 10**9+7


def z_algorithm(S):
    """Zアルゴリズム
    https://snuke.hatenablog.com/entry/2014/12/03/214243 の二番目のコード
    """
    N = len(S)
    Z = [0]*N

    c = 0
    for i in range(1, N):
        if i+Z[i-c] < c+Z[c]:
            Z[i] = Z[i-c]
        else:
            j = max(0, c+Z[c]-i)
            while i+j < N and S[j] == S[i+j]:
                j += 1
            Z[i] = j
            c = i
    Z[0] = len(S)
    return Z


def zfindall(text, pattern, separator="$"):
    """テキストからパターンと一致する部分文字列を探す。
    開始インデックスを返す
    Zアルゴリズムを利用する
    """
    N = len(pattern)
    conc = pattern+separator+text
    Z = z_algorithm(conc)
    return [i-N-1 for i in range(len(conc)) if Z[i] == N]


def solve(N: int, a: "List[int]", b: "List[int]"):

    c = [a[i] ^ a[(i+1) % N]for i in range(N)]
    d = [b[i] ^ b[(i+1) % N]for i in range(N)]*2
    i = -1
    k_cand = zfindall(d, c, separator=[-1])
    # print(k_cand)

    ans = []
    if len(k_cand) == 0:
        return
    if k_cand[0] % N == 0:
        print(0, b[0] ^ a[0])
        for k in k_cand[:0:-1]:
            if k < N:
                print(-k % N, b[0] ^ a[-k % N])
    else:
        for k in k_cand[::-1]:
            if k < N:
                print(-k % N, b[0] ^ a[-k % N])
    return


def main():

    def iterate_tokens():
        for line in sys.stdin:
            for word in line.split():
                yield word
    tokens = iterate_tokens()
    N = int(next(tokens))  # type: int
    a = [int(next(tokens)) for _ in range(N - 1 - 0 + 1)]  # type: "List[int]"
    b = [int(next(tokens)) for _ in range(N - 1 - 0 + 1)]  # type: "List[int]"
    solve(N, a, b)


if __name__ == '__main__':
    main()