package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var t int
if _, err := fmt.Fscan(in, &t); err != nil {
return
}
for tc := 0; tc < t; tc++ {
var n int
fmt.Fscan(in, &n)
a := make([]int, n)
parity := 0
for i := 0; i < n; i++ {
fmt.Fscan(in, &a[i])
parity ^= a[i]
}
if parity != 0 {
fmt.Fprintln(out, "NO")
continue
}
if n%2 != 0 {
fmt.Fprintln(out, "YES")
ops := solveOdd(1, n)
fmt.Fprintln(out, len(ops))
for i, op := range ops {
if i > 0 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, op)
}
fmt.Fprintln(out)
} else {
split := -1
curP := 0
for i := 0; i < n; i++ {
curP ^= a[i]
if i%2 == 0 && curP == 0 {
split = i + 1
break
}
}
if split == -1 {
fmt.Fprintln(out, "NO")
} else {
fmt.Fprintln(out, "YES")
ops1 := solveOdd(1, split)
ops2 := solveOdd(split+1, n)
fmt.Fprintln(out, len(ops1)+len(ops2))
first := true
for _, op := range ops1 {
if !first {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, op)
first = false
}
for _, op := range ops2 {
if !first {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, op)
first = false
}
fmt.Fprintln(out)
}
}
}
}
func solveOdd(start, end int) []int {
var ops []int
if start == end {
return ops
}
for i := start; i <= end-2; i += 2 {
ops = append(ops, i)
}
for i := end - 4; i >= start; i -= 2 {
ops = append(ops, i)
}
return ops
}