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.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.StringTokenizer;

public class F {
	public static void main(String[] args) throws IOException {
		FastScanner in = new FastScanner(System.in);
		PrintWriter out = new PrintWriter(System.out);
		int n = in.nextInt();
		long[] as = new long[n], bs = new long[n], cs = new long[n];
		for (int i = 0; i < n; i++) {
			bs[i] = in.nextLong();
		}
		for (int i = 0; i < n; i++) {
			cs[i] = in.nextLong();
		}
		long sum = 0;
		for (int i = 0; i < n; i++) {
			sum += bs[i] + cs[i];
		}
		sum /= 2 * n;

		for (int i = 0; i < n; i++) {
			as[i] = (bs[i] + cs[i] - sum) / n;
		}
		int[] bits = new int[35];
		for (int i = 0; i < bits.length; i++) {
			long bit = (1L << i);
			for (int j = 0; j < as.length; j++) {
				if ((as[j] & bit) != 0)
					bits[i]++;
			}
		}
		for (int i = 0; i < n; i++) {
			long b = 0, c = 0;
			for (int j = 0; j < bits.length; j++) {
				long bit = 1L << j;
				long cntB = 0, cntC = 0;
				if ((as[i] & bit) != 0) {
					cntB = bits[j];
					cntC = n;
				} else {
					cntC = bits[j];
				}
				b += cntB * bit;
				c += cntC * bit;				
			}
			if (b != bs[i] || c != cs[i]) {
				as = null;
				break;
			}
		}
		if (as == null) {
			out.println(-1);
		} else {
			for (int i = 0; i < n; i++) {
				if (i != 0)
					out.print(' ');
				out.print(as[i]);
			}
			out.println();
		}

		out.close();
	}

	static class FastScanner {
		BufferedReader br;
		StringTokenizer st;

		public FastScanner(InputStream i) {
			br = new BufferedReader(new InputStreamReader(i));
			st = new StringTokenizer("");
		}

		public String next() throws IOException {
			if (st.hasMoreTokens())
				return st.nextToken();
			else
				st = new StringTokenizer(br.readLine());
			return next();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public long nextLong() throws IOException {
			return new Long(next());
		}
	}
}
