#include <iostream>
using namespace std;
const int N = 200;
int n, node[N], a[N];
int ask(int l, int r, int i) {
if (l == r) return l;
int mid = (l + r) >> 1;
cout << mid - l + 2 << " " << i << " ";
for (int i = l; i <= mid; ++i) {
cout << node[i] << " ";
}
cout << endl;
int k;
cin >> k;
if (k == mid - l + 1) return ask(l, mid, i);
return ask(mid + 1, r, i);
}
int main() {
cin >> n;
a[1] = node[1] = 1;
int num = 1;
for (int i = 2; i <= n; ++i) {
cout << num + 1 << " " << i << " ";
for (int j = 1; j <= num; ++j) {
cout << node[j] << " ";
}
cout << endl;
int k;
cin >> k;
if (k <= num) a[i] = ask(1, num, i);
else {
a[i] = ++num;
node[num] = i;
}
}
cout << "0 ";
for (int i = 1; i <= n; ++i) cout << a[i] << " ";
cout << endl;
return 0;
}