```go
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var t int
fmt.Scan(&t)
for test := 0; test < t; test++ {
N := 100000
// First query: 100000 words of 1
var sb strings.Builder
sb.WriteString("? 100000")
for i := 0; i < N; i++ {
sb.WriteString(" 1")
}
fmt.Fprintln(out, sb.String())
out.Flush()
var L int
fmt.Scan(&L)
if L == -1 {
os.Exit(0)
}
if L == 1 {
fmt.Fprintln(out, "! 100000")
out.Flush()
continue
}
lo := (N + L - 1) / L
hi := (N - 1) / (L - 1)
if lo == hi {
fmt.Fprintf(out, "! %d\n", lo)
out.Flush()
continue
}
M := hi - lo + 1
// Second query
var sb2 strings.Builder
sb2.WriteString(fmt.Sprintf("? %d", 2*M))
for vv := lo + 1; vv <= hi + 1; vv++ {
sb2.WriteString(fmt.Sprintf(" %d", lo))
sb2.WriteString(fmt.Sprintf(" %d", vv-lo))
}
fmt.Fprintln(out, sb2.String())
out.Flush()
var L2 int
fmt.Scan(&L2)
if L2 == -1 {
os.Exit(0)
}
num_extra := L2 - M
W := hi + 1 - num_extra
fmt.Fprintf(out, "! %d\n", W)
out.Flush()
}
}
```