package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
var scanner *bufio.Scanner
func readInt() int {
scanner.Scan()
res, _ := strconv.Atoi(scanner.Text())
return res
}
func ask(left, right []int) int {
var sb strings.Builder
sb.WriteString(fmt.Sprintf("? %d %d\n", len(left), len(right)))
for i, val := range left {
if i > 0 {
sb.WriteByte(' ')
}
sb.WriteString(strconv.Itoa(val))
}
sb.WriteByte('\n')
for i, val := range right {
if i > 0 {
sb.WriteByte(' ')
}
sb.WriteString(strconv.Itoa(val))
}
sb.WriteByte('\n')
fmt.Print(sb.String())
return readInt()
}
func solve() {
n := readInt()
k := 0
for i := 2; i <= n; i++ {
left := make([]int, 0, i-1)
for j := 1; j < i; j++ {
left = append(left, j)
}
right := []int{i}
ans := ask(left, right)
if ans != 0 {
k = i
break
}
}
low, high := 1, k-1
for low < high {
mid := (low + high) / 2
left := make([]int, 0, mid-low+1)
for j := low; j <= mid; j++ {
left = append(left, j)
}
right := []int{k}
ans := ask(left, right)
if ans != 0 {
high = mid
} else {
low = mid + 1
}
}
p := low
demagnetized := make([]int, 0)
for i := 1; i < k; i++ {
if i != p {
demagnetized = append(demagnetized, i)
}
}
for i := k + 1; i <= n; i++ {
ans := ask([]int{i}, []int{k})
if ans == 0 {
demagnetized = append(demagnetized, i)
}
}
var sb strings.Builder
sb.WriteString(fmt.Sprintf("! %d", len(demagnetized)))
for _, val := range demagnetized {
sb.WriteString(fmt.Sprintf(" %d", val))
}
sb.WriteByte('\n')
fmt.Print(sb.String())
}
func main() {
scanner = bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
if !scanner.Scan() {
return
}
t, _ := strconv.Atoi(scanner.Text())
for i := 0; i < t; i++ {
solve()
}
}