← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n int
	fmt.Fscan(in, &n)

	maxBit := 0
	for (1 << maxBit) < n {
		maxBit++
	}

	res := make([][2][]int, maxBit)

	for b := 0; b < maxBit; b++ {
		mask := 1 << b

		var set0 []int
		for j := 1; j <= n; j++ {
			if ((j - 1) & mask) == 0 {
				set0 = append(set0, j)
			}
		}

		var set1 []int
		for j := 1; j <= n; j++ {
			if ((j - 1) & mask) == mask {
				set1 = append(set1, j)
			}
		}

		fmt.Fprint(out, len(set0))
		for _, x := range set0 {
			fmt.Fprint(out, " ", x)
		}
		fmt.Fprintln(out)
		out.Flush()

		arr0 := make([]int, n)
		for i := 0; i < n; i++ {
			fmt.Fscan(in, &arr0[i])
		}
		res[b][0] = arr0

		fmt.Fprint(out, len(set1))
		for _, x := range set1 {
			fmt.Fprint(out, " ", x)
		}
		fmt.Fprintln(out)
		out.Flush()

		arr1 := make([]int, n)
		for i := 0; i < n; i++ {
			fmt.Fscan(in, &arr1[i])
		}
		res[b][1] = arr1
	}

	ans := make([]int, n)
	for i := 0; i < n; i++ {
		best := 1 << 30
		for b := 0; b < maxBit; b++ {
			mask := 1 << b
			if (i & mask) == 0 {
				if res[b][1][i] < best {
					best = res[b][1][i]
				}
			} else {
				if res[b][0][i] < best {
					best = res[b][0][i]
				}
			}
		}
		ans[i] = best
	}

	fmt.Fprintln(out, -1)
	for i := 0; i < n; i++ {
		if i > 0 {
			fmt.Fprint(out, " ")
		}
		fmt.Fprint(out, ans[i])
	}
	fmt.Fprintln(out)
	out.Flush()
}
```