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"
"strconv"
"strings"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
scanner.Scan()
t, _ := strconv.Atoi(scanner.Text())
for tc := 0; tc < t; tc++ {
scanner.Scan()
parts := strings.Fields(scanner.Text())
n, _ := strconv.Atoi(parts[0])
k, _ := strconv.Atoi(parts[1])
sets := make([][]int, k)
present := make([]bool, n+1)
for i := 0; i < k; i++ {
scanner.Scan()
line := strings.Fields(scanner.Text())
c, _ := strconv.Atoi(line[0])
sets[i] = make([]int, c)
for j := 0; j < c; j++ {
idx, _ := strconv.Atoi(line[j+1])
sets[i][j] = idx
present[idx] = true
}
}
var rSet []int
for i := 1; i <= n; i++ {
if !present[i] {
rSet = append(rSet, i)
}
}
query := func(indices []int) int {
fmt.Fprintf(writer, "? %d", len(indices))
for _, idx := range indices {
fmt.Fprintf(writer, " %d", idx)
}
fmt.Fprintln(writer)
writer.Flush()
scanner.Scan()
val, _ := strconv.Atoi(scanner.Text())
return val
}
allIndices := make([]int, n)
for i := 0; i < n; i++ {
allIndices[i] = i + 1
}
M := query(allIndices)
var searchSets [][]int
for i := 0; i < k; i++ {
searchSets = append(searchSets, sets[i])
}
hasR := len(rSet) > 0
if hasR {
searchSets = append(searchSets, rSet)
}
m := len(searchSets)
left, right := 0, m-1
for left < right {
mid := (left + right) / 2
var union []int
for i := left; i <= mid; i++ {
union = append(union, searchSets[i]...)
}
isInUnion := make([]bool, n+1)
for _, idx := range union {
isInUnion[idx] = true
}
complement := make([]int, 0, n-len(union))
for i := 1; i <= n; i++ {
if !isInUnion[i] {
complement = append(complement, i)
}
}
val := query(complement)
if val < M {
right = mid
} else {
left = mid + 1
}
}
idx := left
if hasR && idx == m-1 {
fmt.Fprintf(writer, "!")
for i := 0; i < k; i++ {
fmt.Fprintf(writer, " %d", M)
}
fmt.Fprintln(writer)
writer.Flush()
} else {
isInSet := make([]bool, n+1)
for _, x := range searchSets[idx] {
isInSet[x] = true
}
complement := make([]int, 0, n-len(searchSets[idx]))
for i := 1; i <= n; i++ {
if !isInSet[i] {
complement = append(complement, i)
}
}
val := query(complement)
if val == M {
fmt.Fprintf(writer, "!")
for i := 0; i < k; i++ {
fmt.Fprintf(writer, " %d", M)
}
fmt.Fprintln(writer)
writer.Flush()
} else {
fmt.Fprintf(writer, "!")
for i := 0; i < k; i++ {
if i == idx {
fmt.Fprintf(writer, " %d", val)
} else {
fmt.Fprintf(writer, " %d", M)
}
}
fmt.Fprintln(writer)
writer.Flush()
}
}
scanner.Scan()
}
}
```