#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define fi first
#define se second
#define all(a) a.begin(),a.end()
const int maxn = 2 * 1e6;
const int mod =  1e9 + 7;
 vector <int> bin = {1};
int que(int in ,vector <int> tem){
  cout<<tem.size() + 1<<' '<<in<<' ';
  for(int i : tem)cout<<i<<' ';
  cout<<endl;
  cout.flush();
  int an;
  cin>>an;
  return an;
}
signed main(){
    ios::sync_with_stdio(false);
cin.tie(nullptr);
  int n;
  cin>>n;
  vector <int> ans[n + 1];
  for(int i = 2;i <= n;i++){
    int c = que(i,bin);
    if(c > bin.size()){
      bin.push_back(i);
      continue ;
    }
    int st = 0,en = bin.size() - 1,mid;
    int x;
    while(st <= en){
      mid = (st + en )/2;
      vector <int> t;
      for(int i = st;i <= mid;i++){
        t.push_back(bin[i]);
      }
      c = que(i, t);
      if(c == (t.size()-1)){
        en = mid - 1;
        x=bin[mid];
      }
      else{
        st = mid + 1;
      }
    }
    ans[x].push_back(i);
  } 
  cout<<0<<' ';
  int cnt=1;
  int out[n+1]={};
  for(int i = 1;i <= n;i++){
    if (out[i]==0){
      out[i]=cnt;
      cnt++;
    }
    for(int j : ans[i]){
      out[j]=out[i];
    }
  }
  for (int i=1;i<=n;i++){
    cout<<out[i]<<" ";
  }
  return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |