package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
autoScan := func() int {
scanner.Scan()
res, _ := strconv.Atoi(scanner.Text())
return res
}
if !scanner.Scan() {
return
}
t, _ := strconv.Atoi(scanner.Text())
for i := 0; i < t; i++ {
n := autoScan()
b := make([]int, n-1)
for j := 0; j < n-1; j++ {
b[j] = autoScan()
}
a := make([]int, n)
a[0] = b[0]
a[n-1] = b[n-2]
for j := 1; j < n-1; j++ {
a[j] = b[j-1] | b[j]
}
valid := true
for j := 0; j < n-1; j++ {
if a[j]&a[j+1] != b[j] {
valid = false
break
}
}
if !valid {
fmt.Fprintln(out, "-1")
} else {
for j := 0; j < n; j++ {
if j > 0 {
out.WriteByte(' ')
}
out.WriteString(strconv.Itoa(a[j]))
}
out.WriteByte('\n')
}
}
}