```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()
}
```