```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')
}
}
}
```