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
import java.util.*;
import java.io.*;
/*

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

 */
public class f
{
	public static void main(String[] arg) throws IOException
	{
		new f();
	}

	public f() throws IOException
	{
		FastScanner in = new FastScanner(System.in);
		PrintWriter out = new PrintWriter(System.out);
		int n = in.nextInt();
		long[] b = new long[n];
		long[] c = new long[n];
		for(int i = 0; i < n; i++) b[i] = in.nextInt();
		for(int i = 0; i < n; i++) c[i] = in.nextInt();
		if(n == 1)
		{
			if(b[0] != c[0]) out.println(-1);
			else out.println(b[0]);
			out.close();
			return;
		}
		long total = 0;
		for(int i = 0; i < n; i++) total += b[i]+c[i];
		if(total%(2*n) != 0) out.println(-1);
		else
		{
			long x = total/(2*n);
			long[] ans = new long[n];
			for(int i = 0; i < n; i++)
			{
				if(b[i]+c[i]-x < 0)
				{
					out.println(-1);
					out.close();
					return;
				}
				else if((b[i]+c[i]-x)%n != 0)
				{
					out.println(-1);
					out.close();
					return;
				}
				ans[i] = (b[i]+c[i]-x)/n;
			}
			
			int[] bitCount = new int[64];
			for(int i = 0; i < n; i++)
			{
				for(int j = 0; j < 64; j++)
				{
					if(((1L<<j)&ans[i]) != 0) bitCount[j]++;
				}
			}
			long[] nb = new long[n];
			long[] nc = new long[n];
			for(int i = 0; i < n; i++)
			{
				for(int j = 0; j < 64; j++)
				{
					if((ans[i]&(1L<<j)) != 0)
					{
						nb[i] += (1L<<j)*bitCount[j];
						nc[i] += (1L<<j)*n;
					}
					else
					{
						nc[i] += (1L<<j)*bitCount[j];
					}
				}
			}
			for(int i = 0; i < n; i++)
			{
				if(nb[i] != b[i] || nc[i] != c[i])
				{
					out.println(-1);
					out.close();
					return;
				}
			}
			for(int i = 0; i < n; i++)
			{
				out.print(ans[i] + " ");
			}
			out.println();
		}
		in.close(); out.close();
	}
	class FastScanner
	{
		BufferedReader br;
		StringTokenizer st;
		public FastScanner(InputStream in)
		{
			br = new BufferedReader(new InputStreamReader(in));
			st = new StringTokenizer("");
		}
		public String next() throws IOException
		{
			while(!st.hasMoreElements()) st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}
		public int nextInt() throws IOException
		{
			return Integer.parseInt(next());
		}
		public void close() throws IOException
		{
			br.close();
		}
	}
}
