package main
import (
"bufio"
"fmt"
"math/bits"
"os"
)
const queryPrefix = "1"
const answerPrefix = "2"
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n int
if _, err := fmt.Fscan(in, &n); err != nil {
return
}
masks := make([]int, 0, n)
for m := 0; m < (1 << 13) && len(masks) < n; m++ {
if bits.OnesCount(uint(m)) == 6 {
masks = append(masks, m)
}
}
groups := make([][]int, 13)
for i, mask := range masks {
for b := 0; b < 13; b++ {
if (mask>>b)&1 == 1 {
groups[b] = append(groups[b], i+1)
}
}
}
ans := make([]uint64, 13)
for b := 0; b < 13; b++ {
if len(groups[b]) == 0 {
continue
}
fmt.Fprint(out, queryPrefix, " ", len(groups[b]))
for _, idx := range groups[b] {
fmt.Fprint(out, " ", idx)
}
fmt.Fprintln(out)
out.Flush()
var x int64
if _, err := fmt.Fscan(in, &x); err != nil {
return
}
if x < 0 {
return
}
ans[b] = uint64(x)
}
res := make([]uint64, n)
for i, mask := range masks {
var v uint64
for b := 0; b < 13; b++ {
if (mask>>b)&1 == 0 {
v |= ans[b]
}
}
res[i] = v
}
fmt.Fprint(out, answerPrefix)
for i := 0; i < n; i++ {
fmt.Fprint(out, " ", res[i])
}
fmt.Fprintln(out)
out.Flush()
}