package main

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

func getScanner(fp *os.File) *bufio.Scanner {
	scanner := bufio.NewScanner(fp)
	scanner.Split(bufio.ScanWords)
	scanner.Buffer(make([]byte, 500001), 500000)
	return scanner
}

func getNextString(scanner *bufio.Scanner) string {
	scanner.Scan()
	return scanner.Text()
}

func getNextInt(scanner *bufio.Scanner) int {
	i, _ := strconv.Atoi(getNextString(scanner))
	return i
}

func getNextInt64(scanner *bufio.Scanner) int64 {
	i, _ := strconv.ParseInt(getNextString(scanner), 10, 64)
	return i
}

func getNextUint64(scanner *bufio.Scanner) uint64 {
	i, _ := strconv.ParseUint(getNextString(scanner), 10, 64)
	return i
}

func getNextFloat64(scanner *bufio.Scanner) float64 {
	i, _ := strconv.ParseFloat(getNextString(scanner), 64)
	return i
}

func main() {
	fp := os.Stdin
	wfp := os.Stdout

	if len(os.Args) > 1 {
		fp, _ = os.Open(os.Args[1])
		if len(os.Args) > 2 {
			wfp, _ = os.Create(os.Args[2])
		}
	}

	scanner := getScanner(fp)
	writer := bufio.NewWriter(wfp)

	n := getNextInt(scanner)
	aa := make([]int, n)
	bb := make([]int, n)

	for i := 0; i < n; i++ {
		aa[i] = getNextInt(scanner)
	}

	for i := 0; i < n; i++ {
		bb[i] = getNextInt(scanner)
	}

	wlb := WaveletKeanuReeves{}
	wlb.init(bb)

	ans := 0
	for bit := 0; bit < 30; bit++ {
		t := 1 << uint(bit)
		wlb.bits = bit + 1
		c := 0
		memo := make([]int, 1<<17)
		for i := 0; i < n; i++ {
			a := aa[i] % (t * 2)
			if a < t {
				if bit < 16 {
					if memo[a] == 0 {
						memo[a] = wlb.rangefreq(0, n, t-a, t*2-a)
					}
					c += memo[a]
				} else {
					c += wlb.rangefreq(0, n, t-a, t*2-a)
				}
				continue
			}
			if bit < 16 {
				if memo[a] == 0 {
					memo[a] = n - wlb.rangefreq(0, n, t*2-a, t*3-a)
				}
				c += memo[a]
			} else {
				c += n - wlb.rangefreq(0, n, t*2-a, t*3-a)
			}
		}
		ans |= (c % 2) << uint(bit)
	}

	fmt.Fprintln(writer, ans)
	writer.Flush()
}

// WaveletKeanuReeves ...
type WaveletKeanuReeves struct {
	bits, n        int
	tree           [][]int
	data, topIndex []int
}

func (wl *WaveletKeanuReeves) init(raw []int) {
	n := len(raw)
	wl.bits = 30
	wl.tree = make([][]int, wl.bits, wl.bits)
	wl.data = make([]int, wl.bits*(n+1), wl.bits*(n+1))

	buf := make([]int, n, n)
	sorted := make([]int, n, n)
	wl.topIndex = make([]int, n, n)
	for i := 0; i < n; i++ {
		sorted[i] = i
		wl.topIndex[i] = -1
	}

	for i := wl.bits - 1; i >= 0; i-- {
		wl.tree[i] = wl.data[i*(n+1) : (i+1)*(n+1)]
		bi := 0
		si := 0
		for ii := 0; ii < n; ii++ {
			wl.tree[i][ii+1] = (raw[sorted[ii]] >> uint(i)) & 1
			if wl.tree[i][ii+1] == 0 {
				sorted[si] = sorted[ii]
				si++
			} else {
				buf[bi] = sorted[ii]
				bi++
			}
			wl.tree[i][ii+1] += wl.tree[i][ii]
		}
		for ii := 0; ii < bi; ii++ {
			sorted[si+ii] = buf[ii]
		}
	}

	wl.n = n
}

func (wl *WaveletKeanuReeves) count0(h, i int) int {
	return i - wl.tree[h][i]
}

func (wl *WaveletKeanuReeves) count1(h, i int) int {
	return wl.tree[h][i]
}

func (wl *WaveletKeanuReeves) next(h, i int) int {
	bit := wl.tree[h][i+1] - wl.tree[h][i]
	if bit == 0 {
		return wl.count0(h, i)
	}
	index := wl.count0(h, wl.n) + wl.tree[h][i]
	return index
}

func (wl *WaveletKeanuReeves) nextrange0(h, l, r int) (int, int) {
	return wl.count0(h, l), wl.count0(h, r)
}

func (wl *WaveletKeanuReeves) nextrange1(h, l, r int) (int, int) {
	start1 := wl.count0(h, wl.n)
	return start1 + wl.count1(h, l), start1 + wl.count1(h, r)
}

func (wl *WaveletKeanuReeves) access(at int) int {
	var ans int

	for i := wl.bits - 1; i >= 0; i-- {
		bit := wl.tree[i][at+1] - wl.tree[i][at]
		ans |= bit << uint(i)
		at = wl.next(i, at)
	}

	return ans
}

func (wl *WaveletKeanuReeves) rank(at, c int) int {
	l := 0
	r := at
	for i := wl.bits - 1; i >= 0 && l < r; i-- {
		bit := (c >> uint(i)) & 1
		if bit == 0 {
			l, r = wl.nextrange0(i, l, r)
			continue
		}
		l, r = wl.nextrange1(i, l, r)
	}

	return r - l
}

func (wl *WaveletKeanuReeves) rank0(h, at int) int {
	l := 0
	r := wl.n
	for l < r {
		m := (l + r) >> 1
		if wl.count0(h, m) < at+1 {
			l = m + 1
			continue
		}
		r = m
	}
	return l - 1
}

func (wl *WaveletKeanuReeves) rank1(h, at int) int {
	l := 0
	r := wl.n
	for l < r {
		m := (l + r) >> 1
		if wl.count1(h, m) < at+1 {
			l = m + 1
			continue
		}
		r = m
	}
	return l - 1
}

func (wl *WaveletKeanuReeves) gotop(h, index int) int {
	for i := h; i < wl.bits; i++ {
		index1 := wl.count0(i, wl.n)
		if index < index1 {
			index = wl.rank0(i, index)
			continue
		}
		index = wl.rank1(i, index-index1)
	}
	return index
}

func (wl *WaveletKeanuReeves) gettopindex(index int) int {
	if wl.topIndex[index] != -1 {
		return wl.topIndex[index]
	}
	wl.topIndex[index] = wl.gotop(0, index)
	return wl.topIndex[index]
}

func (wl *WaveletKeanuReeves) selects(at, c int) int {
	l := 0
	r := wl.n
	for i := wl.bits - 1; i >= 0 && l < r; i-- {
		bit := (c >> uint(i)) & 1
		if bit == 0 {
			l, r = wl.nextrange0(i, l, r)
			continue
		}
		l, r = wl.nextrange1(i, l, r)
	}
	return wl.gettopindex(l + at)
}

func (wl *WaveletKeanuReeves) getbottomrange(l, r, c int) (int, int) {
	for i := wl.bits - 1; i >= 0; i-- {
		bit := (c >> uint(i)) & 1
		if bit == 0 {
			l, r = wl.nextrange0(i, l, r)
			continue
		}
		l, r = wl.nextrange1(i, l, r)
	}
	return l, r
}

func (wl *WaveletKeanuReeves) quantile(l, r, rank int) int {
	if rank > r-l {
		return -1
	}
	var ans int
	for i := wl.bits - 1; i >= 0; i-- {
		c1 := wl.count1(i, r) - wl.count1(i, l)
		if c1 >= rank {
			ans |= 1 << uint(i)
			l, r = wl.nextrange1(i, l, r)
			continue
		}
		l, r = wl.nextrange0(i, l, r)
		rank -= c1
	}

	return ans
}

func (wl *WaveletKeanuReeves) rangerankless(l, r, c int) int {
	if c>>uint(wl.bits) > 0 {
		return r - l
	}
	ans := 0
	for i := wl.bits - 1; i >= 0; i-- {
		bit := (c >> uint(i)) & 1
		if bit == 0 {
			l, r = wl.nextrange0(i, l, r)
			continue
		}
		ans += wl.count0(i, r) - wl.count0(i, l)
		l, r = wl.nextrange1(i, l, r)
	}

	return ans
}

func (wl *WaveletKeanuReeves) rangerankmore(l, r, c int) int {
	ans := 0
	for i := wl.bits - 1; i >= 0; i-- {
		bit := (c >> uint(i)) & 1
		if bit == 1 {
			l, r = wl.nextrange1(i, l, r)
			continue
		}
		ans += wl.count1(i, r) - wl.count1(i, l)
		l, r = wl.nextrange0(i, l, r)
	}

	return ans
}

func (wl *WaveletKeanuReeves) rangefreq(l, r, min, max int) int {
	return wl.rangerankless(l, r, max) - wl.rangerankless(l, r, min)
}

func (wl *WaveletKeanuReeves) prevless(at, c int) int {
	l := 0
	r := at
	for l < r {
		m := (l + r) >> 1
		if wl.rangerankless(m, at, c) == 0 {
			r = m
			continue
		}
		l = m + 1
	}

	return l - 1
}

func (wl *WaveletKeanuReeves) prevmore(at, c int) int {
	l := 0
	r := at
	for l < r {
		m := (l + r) >> 1
		if wl.rangerankmore(m, at, c) == 0 {
			r = m
			continue
		}
		l = m + 1
	}

	return l - 1
}

func (wl *WaveletKeanuReeves) nextless(at, c int) int {
	l := at + 1
	r := wl.n
	for l < r {
		m := (l + r) >> 1
		if wl.rangerankless(at+1, m+1, c) == 0 {
			l = m + 1
			continue
		}
		r = m
	}

	return r
}

func (wl *WaveletKeanuReeves) nextmore(at, c int) int {
	l := at + 1
	r := wl.n
	for l < r {
		m := (l + r) >> 1
		if wl.rangerankmore(at+1, m+1, c) == 0 {
			l = m + 1
			continue
		}
		r = m
	}

	return r
}


Measured memory_bytes: 76416