Problem:
Score : 600 points

Problem Statement

Given are two sequences a=\{a_0,\ldots,a_{N-1}\} and b=\{b_0,\ldots,b_{N-1}\} of N non-negative integers each.

Snuke will choose an integer k such that 0 \leq k < N and an integer x not less than 0, to make a new sequence of length N, a'=\{a_0',\ldots,a_{N-1}'\}, as follows:

a_i'= a_{i+k \mod N}\ XOR \ x

Find all pairs (k,x) such that a' will be equal to b.

What is \mbox{ XOR }?

The XOR of integers A and B, A \mbox{ XOR } B, is defined as follows:

When A \mbox{ XOR } B is written in base two, the digit in the 2^k's place (k \geq 0) is 1 if either A or B, but not both, has 1 in the 2^k's place, and 0 otherwise.

For example, 3 \mbox{ XOR } 5 = 6. (In base two: 011 \mbox{ XOR } 101 = 110.)

Constraints

1 \leq N \leq 2 \times 10^5

0 \leq a_i,b_i < 2^{30}

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
a_0 a_1 ... a_{N-1}
b_0 b_1 ... b_{N-1}

Output

Print all pairs (k, x) such that a' and b will be equal, using one line for each pair, in ascending order of k (ascending order of x for pairs with the same k).

If there are no such pairs, the output should be empty.

Sample Input 1

3
0 2 1
1 2 3

Sample Output 1

1 3

If (k,x)=(1,3),

a_0'=(a_1\ XOR \ 3)=1

a_1'=(a_2\ XOR \ 3)=2

a_2'=(a_0\ XOR \ 3)=3

and we have a' = b.

Sample Input 2

5
0 0 0 0 0
2 2 2 2 2

Sample Output 2

0 2
1 2
2 2
3 2
4 2

Sample Input 3

6
0 1 3 7 6 4
1 5 4 6 2 3

Sample Output 3

2 2
5 5

Sample Input 4

2
1 2
0 0

Sample Output 4

No pairs may satisfy the condition.

Solution in Common Lisp (SBCL 1.1.14) (judge verdict: Accepted)

;; F - Xor Shift

(defun main ()
  (let* ((N (read))
         (a (loop repeat N collect (read-fixnum)))
         (b (loop repeat N collect (read-fixnum))))
    (loop for kx in (solve N a b)
          do (format t "~{~a~^ ~}~%" kx))))

(defun solve (N a-lst b-lst)
  (let ((a (make-array N :initial-contents a-lst))
        (b (make-array N :initial-contents b-lst))
        (a-xor (make-array N)) ; 直前の要素とのxor (循環)
        (b-xor (make-array (1- N)))) ; 〃 (先頭を除く)
    ; (k,x)が解 ⇔ a-xor[k:]がb-xorと一致, x = b[0] XOR a[k]
    ; a-xor, b-xorを構築
    (loop for i below N
      do (setf (aref a-xor i) (logxor (aref a i) (aref a (mod (1+ i) N)))))
    (loop for i below (1- N)
      do (setf (aref b-xor i) (logxor (aref b i) (aref b (1+ i)))))
    ; a-xor * 2中のb-xorと一致する位置をKMP法で探す
    (loop for k in (kmp-search a-xor b-xor)
          for x = (logxor (aref a (mod k N)) (aref b 0))
          when (< k N)
          collect (list k x))))

(defun kmp-search (text pattern)
  "text * 2中のpatternに一致する位置をすべて返す."
  (let ((n (array-dimension text 0))
        (m (array-dimension pattern 0))
        (pref (compute-prefix-function pattern)))
    (loop with q = 0
          for i from 0 below (* 2 n)
          for c = (aref text (mod i n))
          do (loop until (or (zerop q) (eql (aref pattern q) c))
                   do (setf q (aref pref q))) ; next char does not match
          when (eql (aref pattern q) c)
          do (incf q) end ; next char matches
          when (= q m)
          collect (- i (1- m))
          and do (setf q (aref pref q))))) ; look for the next match

(defun compute-prefix-function (pattern)
  "pref : {1,2,...,m} -> {0,1,...,m-1}
   pref[q] = max {k : k < q and P[:q].endswith(P[:k])}"
  (let* ((m (array-dimension pattern 0))
         (pref (make-array (1+ m) :initial-element 0)))
    (loop with k = 0
          for q from 1 below m
          for c = (aref pattern q)
          do (loop until (or (zerop k) (eql (aref pattern k) c))
                   do (setf k (aref pref k)))
          when (eql (aref pattern k) c)
          do (incf k) end
          do (setf (aref pref (1+ q)) k))
    pref))

(defun read-fixnum (&optional (in *standard-input*))
  "readより速い非負整数専用read (整数間に空白または改行1個に限る)
   cf. https://qiita.com/sansaqua/items/0b6417cb541047e29da4"
  (loop with acc = 0
        for byte = (read-byte in)
        if (<= 48 byte 57)
          do (setf acc (+ (* acc 10) (- byte 48)))
        else return acc))

(main)