package main
import (
"fmt"
)
func main() {
num := 0
for {
n, _ := fmt.Scan(&num)
if n == 0 {
break
} else {
arr := make([]int, num)
for i := 0; i < len(arr); i++ {
fmt.Scan(&arr[i])
}
s, b := process(arr)
fmt.Println(s, b)
}
}
}
// 异或操作,相同为0,不同为1
// 0^n = n
// 0^1 = 1, 0^0 = 0, 1^1=0
func process(arr []int) (int, int) {
// 其它数出现偶次,其它数自己和自己xor=0
// 剩下的数位,有2个不同的数各只出现一次,假设为a,b
xor := 0
for i := 0; i < len(arr); i++ {
xor ^= arr[i]
}
// xor = a^b
// 取出xor中,最右边第一个不为0的数last1
// 如假设xor=100100, last1=100
// arr中所有的数,该为第一个不为0的数进行异或操作
// 异或的结果值为xoraorb就等于 a 或者 b
last1 := (^xor + 1) & xor
// 此时数组可以分割为2个组别
// 包含a的一组,包含b的一组
xorab := 0
for i := 0; i < len(arr); i++ {
// 这里不能写 == 1,
// 不一定为最后一个1
if last1 & arr[i] == last1 {
xorab ^= arr[i]
}
}
small := xorab
big := xorab ^ xor
if small > big {
small, big = big, small
}
return small, big
}