#include <bits/stdc++.h>
#include <vector>
#include "code.h"
using namespace std;


vector<pair<int, int>> ZapisiTacke(int N){
    vector<pair<int, int>> tacke(N+1);
    for(int i=1; i<=N-1; i++) tacke[i]={i-1,10};
    tacke[N]={0,0};
    return tacke;
}
int indxn;


vector<int> srt(set<int> skup,int poredjenje){
    if(skup.empty()){
        if(poredjenje!=0) return{poredjenje};
        return {};
    }
    set<int> levo,desno;
    for(auto x:skup){
        if(Pitaj(indxn,poredjenje,x)==1)
            levo.insert(x);
        else
            desno.insert(x);
    }
    int p1=0,p2=0;
    if(levo.size()){p1=*levo.begin();levo.erase(levo.begin());}
    if(desno.size()){p2=*desno.begin();desno.erase(desno.begin());}
    vector<int> rezl=srt(levo,p1);
    vector<int> rezd=srt(desno,p2);
    vector<int> rez;
    for(auto x:rezl)
        rez.push_back(x);
    rez.push_back(poredjenje);
    for(auto x:rezd)
        rez.push_back(x);
    return rez;
}




vector<int> Resi(int N, int Q){
    vector<int> resenje(N+1);
    if(Pitaj(1,2,3)!=0){
        if(Pitaj(2,3,4)==0)
            indxn=1;
        if(Pitaj(1,3,4)==0)
            indxn=2;
        if(Pitaj(1,2,4)==0)
            indxn=3;
    }
    else{
        for(int i=4; i<=N; i++){
            if(Pitaj(1,2,i)!=0)
                indxn=i;
        }
    }
    set<int> skup;
    for(int i=1; i<=N; i++){
        if(i==indxn) continue;
        skup.insert(i);
    }
    int poredjenje=*skup.begin();skup.erase(skup.begin());
    vector<int> rez=srt(skup,poredjenje);
    for(int i=0; i<N-1; i++)
        resenje[rez[i]]=i+1;
    resenje[indxn]=N;
    return resenje;
}