← Home
```go
package main

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

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	scanInt := func() int {
		scanner.Scan()
		val, _ := strconv.Atoi(scanner.Text())
		return val
	}

	if scanner.Scan() {
		t, _ := strconv.Atoi(scanner.Text())
		for ; t > 0; t-- {
			n := scanInt()
			a := make([]int, n)
			for i := 0; i < n; i++ {
				a[i] = scanInt()
			}

			currOr := 0
			for i := 0; i < n; i++ {
				maxVal := -1
				bestIdx := -1

				for j := i; j < n; j++ {
					if val := currOr | a[j]; val > maxVal {
						maxVal = val
						bestIdx = j
					}
				}

				if maxVal == currOr {
					break
				}

				a[i], a[bestIdx] = a[bestIdx], a[i]
				currOr = maxVal
			}

			for i := 0; i < n; i++ {
				if i > 0 {
					writer.WriteByte(' ')
				}
				writer.WriteString(strconv.Itoa(a[i]))
			}
			writer.WriteByte('\n')
		}
	}
}
```