For problem statement at 1000-1999/1300-1399/1360-1369/1363/problemD.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1360-1369/1363/verifierD.go ends with Problem D is interactive and cannot be automatically verified. can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
func query(writer *bufio.Writer, reader *bufio.Reader, indices []int) int {
fmt.Fprintf(writer, "? %d", len(indices))
for _, idx := range indices {
fmt.Fprintf(writer, " %d", idx)
}
fmt.Fprintln(writer)
writer.Flush()
var result int
fmt.Fscan(reader, &result)
return result
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
var t int
fmt.Fscan(reader, &t)
for tc := 0; tc < t; tc++ {
var n, k int
fmt.Fscan(reader, &n, &k)
inSubset := make([]int, n+1)
for i := 0; i < k; i++ {
var c int
fmt.Fscan(reader, &c)
for j := 0; j < c; j++ {
var idx int
fmt.Fscan(reader, &idx)
inSubset[idx] = i + 1
}
}
allIndices := make([]int, n)
for i := 0; i < n; i++ {
allIndices[i] = i + 1
}
globalMax := query(writer, reader, allIndices)
candidates := make([]int, n)
for i := 0; i < n; i++ {
candidates[i] = i + 1
}
for len(candidates) > 1 {
mid := len(candidates) / 2
left := candidates[:mid]
result := query(writer, reader, left)
if result == globalMax {
candidates = left
} else {
candidates = candidates[mid:]
}
}
maxPos := candidates[0]
maxSubset := inSubset[maxPos]
password := make([]int, k)
for i := 0; i < k; i++ {
if i+1 == maxSubset {
notInSi := make([]int, 0, n)
for j := 1; j <= n; j++ {
if inSubset[j] != i+1 {
notInSi = append(notInSi, j)
}
}
password[i] = query(writer, reader, notInSi)
} else {
password[i] = globalMax
}
}
fmt.Fprintf(writer, "!")
for i := 0; i < k; i++ {
fmt.Fprintf(writer, " %d", password[i])
}
fmt.Fprintln(writer)
writer.Flush()
var response string
fmt.Fscan(reader, &response)
}
}
```