← Home
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()
	}
}