#include <bits/stdc++.h>
using namespace std;
const int nx = 155;
int n, c;
int pa[nx];
int fp(int n) {
if (pa[n] == n) return n;
return pa[n] = fp(pa[n]);
}
void unite(int u, int v) {
int pu = fp(u), pv = fp(v);
if (pu == pv) return;
pa[pu] = pv;
}
int query(vector<int> q) {
cout << q.size() << " ";
for (auto x : q) cout << x << " ";
cout << endl;
int ans;
cin >> ans;
cout << endl;
return ans;
}
int main() {
cin >> n;
vector<int> q;
for (int i = 1; i <= n; i++) pa[i] = i, q.push_back(i);
c = query(q);
for (int i = 1; i <= n; i++) {
int l = i, r = n;
while (l < r) {
int mid = (l + r + 1) / 2;
q.clear();
for (int j = i; j <= mid; j++) q.push_back(j);
if (query(q) < mid - i + 1) r = mid - 1;
else l = mid;
}
if (l + 1 <= n) {
q.clear();
int k = query({i, l + 1});
if (k == 1) unite(i, l + 1);
}
}
vector<int> ans;
for (int i = 1; i <= n; i++) ans.push_back(pa[i]);
sort(ans.begin(), ans.end());
ans.erase(unique(ans.begin(), ans.end()), ans.end());
cout << 0 << " ";
for (int i = 1; i <= n; i++) {
int pu = fp(i);
cout << lower_bound(ans.begin(), ans.end(), pu) - ans.begin() + 1 << " ";
}
cout << endl;
return 0;
}
/*
5
1 2 1 3 2
*/