Anton goes to school, his favorite lessons are arraystudying. He usually solves all the tasks pretty fast, but this time the teacher gave him a complicated one: given two arrays b and c of length n, find array a, such that:

<image>

where a and b means bitwise AND, while a or b means bitwise OR.

Usually Anton is good in arraystudying, but this problem is too hard, so Anton asks you to help.

Input

The first line of the input contains a single integers n (1 ≤ n ≤ 200 000) — the size of arrays b and c.

The second line contains n integers bi (0 ≤ bi ≤ 109) — elements of the array b.

Third line contains n integers ci (0 ≤ ci ≤ 109) — elements of the array c.

Output

If there is no solution, print  - 1.

Otherwise, the only line of the output should contain n non-negative integers ai — elements of the array a. If there are multiple possible solutions, you may print any of them.

Examples

Input

4
6 8 4 4
16 22 10 10


Output

3 5 1 1 


Input

5
8 25 14 7 16
19 6 9 4 25


Output

-1
def solve():
  z = [0] * 31
  n = int(raw_input())
  b = [int(s) for s in raw_input().split()]
  c = [int(s) for s in raw_input().split()]
  d = [b[i] + c[i] for i in xrange(n)]
  s = sum(d)
  if s % (n * 2) != 0:
    return [-1]
  s /= n * 2
  a = []
  for i in xrange(n):
    if (d[i] - s) % n != 0:
      return [-1]
    x = (d[i] - s) / n
    a.append(x)
    for j in xrange(31):
      if x % 2 != 0:
        z[j] += 1
      x /= 2
  for i in xrange(n):
    x = a[i]
    va = 0
    vo = 0
    for j in xrange(31):
      if x % 2 == 0:
        vo += z[j] * (1 << j)
      else:
        va += z[j] * (1 << j)
        vo += n * (1 << j)
      x /= 2
    if b[i] != va or c[i] != vo:
      return [-1]
  return a

def main():
  print ' '.join([str(x) for x in solve()])

if __name__ == '__main__':
  main()