#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define f first
#define s second
int main(){    
    int N;cin>>N;
    vector<int> groups;
    vector<int> occ(N);
    occ[0]=0;
    groups.push_back(0);
    int nG=1;
    int res,fr;
    for(int i=1;i<N;i++){
        cout<<nG+1;
        for(int j=0;j<nG;j++){
            cout<<" "<<groups[j]+1;
        }
        cout<<" "<<i+1<<endl;
        cin>>res;
        if(res==nG+1){
            groups.push_back(i);
            occ[i]=i;
            nG++;
            continue;
        }
        int l=0,r=nG-1;
        while(l<r){
            int m=(l+r)/2;
            cout<<(m-l)+2;
            for(int j=l;j<=m;j++){
                cout<<" "<<groups[j]+1;
            }
            cout<<" "<<i+1<<endl;
            cin>>res;
            if(res==(m-l)+2){
                l=m+1;
            }
            else{
                r=m;
            }
            if(l==r){
                fr=l;
                break;
            }
        }
        occ[i]=occ[fr];
    }
    pair<int,int> fres[N];
    for(int i=0;i<N;i++){
        fres[i].f=occ[i];
        fres[i].s=i;
    }
    sort(fres,fres+N);
    int bef=-1,cnt=0;
    for(int i=0;i<N;i++){
        if(fres[i].f!=bef){
            bef=fres[i].f;
            cnt++;
        }
        fres[i].f=fres[i].s;
        fres[i].s=cnt;
    }
    sort(fres,fres+N);
    cout<<0;
    for(int i=0;i<N;i++){
        cout<<" "<<fres[i].s;
    }
    cout<<endl;
}
| # | 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... |