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