← Home
```go
package main

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

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	var n int
	fmt.Fscan(in, &n)

	x := make([]int, n+1)
	pos := make([]int, n)

	dup_j, dup_k := -1, -1

	for i := 2; i <= n; i++ {
		fmt.Fprintf(out, "XOR 1 %d\n", i)
		out.Flush()
		var val int
		fmt.Fscan(in, &val)
		x[i] = val

		if dup_j == -1 {
			if val == 0 {
				dup_j = 1
				dup_k = i
			} else if pos[val] != 0 {
				dup_j = pos[val]
				dup_k = i
			} else {
				pos[val] = i
			}
		}
	}

	var a1 int
	if dup_j != -1 {
		fmt.Fprintf(out, "AND %d %d\n", dup_j, dup_k)
		out.Flush()
		var val int
		fmt.Fscan(in, &val)
		if dup_j == 1 {
			a1 = val
		} else {
			a1 = val ^ x[dup_j]
		}
	} else {
		idx1 := pos[1]
		idx2 := pos[2]
		fmt.Fprintf(out, "AND 1 %d\n", idx1)
		out.Flush()
		var val1 int
		fmt.Fscan(in, &val1)

		fmt.Fprintf(out, "AND 1 %d\n", idx2)
		out.Flush()
		var val2 int
		fmt.Fscan(in, &val2)

		a1 = val1 | val2
	}

	fmt.Fprintf(out, "!")
	for i := 1; i <= n; i++ {
		if i == 1 {
			fmt.Fprintf(out, " %d", a1)
		} else {
			fmt.Fprintf(out, " %d", a1^x[i])
		}
	}
	fmt.Fprintf(out, "\n")
	out.Flush()
}
```