← Home
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)

	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())

	b := make([]int64, n)
	for i := 0; i < n; i++ {
		scanner.Scan()
		b[i], _ = strconv.ParseInt(scanner.Text(), 10, 64)
	}

	c := make([]int64, n)
	for i := 0; i < n; i++ {
		scanner.Scan()
		c[i], _ = strconv.ParseInt(scanner.Text(), 10, 64)
	}

	var sumBC int64 = 0
	for i := 0; i < n; i++ {
		sumBC += b[i] + c[i]
	}

	if sumBC%(2*int64(n)) != 0 {
		fmt.Println("-1")
		return
	}

	S := sumBC / (2 * int64(n))
	a := make([]int64, n)

	for i := 0; i < n; i++ {
		val := b[i] + c[i] - S
		if val < 0 || val%int64(n) != 0 {
			fmt.Println("-1")
			return
		}
		a[i] = val / int64(n)
	}

	counts := make([]int64, 31)
	for i := 0; i < n; i++ {
		for k := 0; k < 31; k++ {
			if (a[i]>>k)&1 == 1 {
				counts[k]++
			}
		}
	}

	for i := 0; i < n; i++ {
		var expectedB int64 = 0
		for k := 0; k < 31; k++ {
			if (a[i]>>k)&1 == 1 {
				expectedB += (int64(1) << k) * counts[k]
			}
		}
		if expectedB != b[i] {
			fmt.Println("-1")
			return
		}
	}

	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()
	for i := 0; i < n; i++ {
		if i > 0 {
			out.WriteString(" ")
		}
		out.WriteString(strconv.FormatInt(a[i], 10))
	}
	out.WriteString("\n")
}