#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF=1e18;
const int N=200005;
int n;
int ask(vector<int>v){
cout<<v.size()<<' ';
for(int x:v) cout<<x<<' ';
cout<<endl;
cout.flush();
int cnt;
cin>>cnt;
return cnt;
}
void bf(){
vector<int>res(n+1,-1);
int cur=1;
for(int i=1;i<=n;i++){
if(res[i]!=-1) continue;
vector<int>f={i};
for(int j=i+1;j<=n;j++){
f.push_back(j);
if(ask(f)==2) f.pop_back();
}
for(int id:f) res[id]=cur;
++cur;
}
cout<<0<<' ';
for(int i=1;i<=n;i++) cout<<res[i]<<' ';
cout<<endl;
cout.flush();
}
void solve(){
cin>>n;
vector<int>res(n+1,-1);
vector<bool>start(n+1,0);
vector<int>all;
int last=0;
int dist_cnt=0;
for(int i=1;i<=n;i++){
all.push_back(i);
int cnt=ask(all);
if(cnt>last) start[i]=1,++dist_cnt;
last=cnt;
}
if(dist_cnt<=20){
bf();
return;
}
int cur=1;
for(int i=1;i<=n;i++){
if(!start[i]) continue;
vector<int>f={i};
for(int j=i+1;j<=n;j++){
if(res[j]!=-1) continue;
if(start[j]) continue;
f.push_back(j);
if(ask(f)>1) f.pop_back();
}
for(int id:f) res[id]=cur;
++cur;
}
cout<<0<<' ';
for(int i=1;i<=n;i++) cout<<res[i]<<' ';
cout<<endl;
cout.flush();
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int T=1;//cin>>T;
while(T--) solve();
}