Buggy python submission (verdict: Time Limit Exceeded):
import sys
input=sys.stdin.readline
def create_table(pattern):
    table = [0 for _ in range(len(pattern))]
    j = 0
    for i in range(1, len(pattern)):
        if pattern[i] == pattern[j]:
            j += 1
            table[i] = j
        else:
            table[i] = j
            j = 0
    return table

def kmp_search(string, pattern):
    table = create_table(pattern)
    i = j = 0
    ret=[]
    while i < len(string): #and j < len(pattern):
        if string[i] == pattern[j]:
            i += 1
            j += 1
        elif j == 0:
            i += 1
        else:
            j = table[j]
        if j == len(pattern):
            ret.append(i - j)
            j=table[j-1]
    return ret
#print(kmp_search(list('abcabc'),list('abc')))
n=int(input())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
a.append(a[0])
b.append(b[0])
a2=[]
b2=[]
for i in range(n):
    a2.append(a[i]^a[i+1])
    b2.append(b[i]^b[i+1])
aa=a2+a2
aa.pop(-1)
k=kmp_search(aa,b2)
ans=[]
for i in k:
    if i<n:
      ans.append([i,a[i]^b[0]])
for i in ans:
    print(*i)


Fixed submission:
class KMP:
    def __init__(self, P):
        self.P = P
        self.N = len(P)
        self.T = [0] * (self.N + 1)
        self._compile()

    def _compile(self):
        j = 0
        self.T[0] = -1
        for i in range(1, self.N):
            self.T[i] = j
            j += 1 if self.P[i] == self.P[j] else -j
        self.T[self.N] = j

    def search(self, S):
        NS = len(S)
        i = m = 0
        A = []
        while m + i < NS:
            if self.P[i] == S[m + i]:
                i += 1
                if i != self.N:
                    continue
                A.append(m)
            m += i - self.T[i]
            i = max(0, self.T[i])
        return A

N = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
C = [A[i]^A[(i+1)%N] for i in range(N)]
D = [B[i]^B[(i+1)%N] for i in range(N)]
C = C + C[:-1]
K = KMP(D).search(C)
#D string C pattern
for k in K:
    print(k, A[k]^B[0])

Buggy python submission (verdict: Time Limit Exceeded):
def create_table(pattern):
    table = [0 for _ in range(len(pattern))]
    j = 0
    for i in range(1, len(pattern)):
        if pattern[i] == pattern[j]:
            j += 1
            table[i] = j
        else:
            table[i] = j
            j = 0
    return table

def kmp_search(string, pattern):
    table = create_table(pattern)
    i = j = 0
    ret=[]
    while i < len(string): #and j < len(pattern):
        if string[i] == pattern[j]:
            i += 1
            j += 1
        elif j == 0:
            i += 1
        else:
            j = table[j]
        if j == len(pattern):
            ret.append(i - j)
            j=table[j-1]
    return ret
#print(kmp_search(list('abcabc'),list('abc')))
n=int(input())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
a.append(a[0])
b.append(b[0])
a2=[]
b2=[]
for i in range(n):
    a2.append(a[i]^a[i+1])
    b2.append(b[i]^b[i+1])
aa=a2+a2
aa.pop(-1)
k=kmp_search(aa,b2)
ans=[]
for i in k:
    if i<n:
      ans.append([i,a[i]^b[0]])
for i in ans:
    print(*i)

Fixed submission:
class KMP:
    def __init__(self, P):
        self.P = P
        self.N = len(P)
        self.T = [0] * (self.N + 1)
        self._compile()

    def _compile(self):
        j = 0
        self.T[0] = -1
        for i in range(1, self.N):
            self.T[i] = j
            j += 1 if self.P[i] == self.P[j] else -j
        self.T[self.N] = j

    def search(self, S):
        NS = len(S)
        i = m = 0
        A = []
        while m + i < NS:
            if self.P[i] == S[m + i]:
                i += 1
                if i != self.N:
                    continue
                A.append(m)
            m += i - self.T[i]
            i = max(0, self.T[i])
        return A

N = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
C = [A[i]^A[(i+1)%N] for i in range(N)]
D = [B[i]^B[(i+1)%N] for i in range(N)]
C = C + C[:-1]
K = KMP(D).search(C)
#D string C pattern
for k in K:
    print(k, A[k]^B[0])