← Home
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')
		}
	}
}