← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var t int
	fmt.Fscan(in, &t)
	for ; t > 0; t-- {
		var n int
		var sa, sb string
		fmt.Fscan(in, &n)
		fmt.Fscan(in, &sa)
		fmt.Fscan(in, &sb)

		a := []byte(sa)
		b := []byte(sb)

		l, r := 0, n-1
		rev, inv := 0, 0
		ops := make([]int, 0, 2*n)

		for i := n - 1; i >= 0; i-- {
			var front byte
			if rev == 0 {
				front = a[l]
			} else {
				front = a[r]
			}
			x := int(front-'0') ^ inv
			bi := int(b[i] - '0')
			if x == bi {
				ops = append(ops, 1)
			}
			ops = append(ops, i+1)
			prevRev := rev
			inv ^= 1
			rev ^= 1
			if prevRev == 0 {
				l++
			} else {
				r--
			}
		}

		fmt.Fprint(out, len(ops))
		for _, v := range ops {
			fmt.Fprint(out, " ", v)
		}
		fmt.Fprintln(out)
	}
}
```