#include <bits/stdc++.h>
#include "code.h"
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;

namespace {
    static vector<pair<int, int>> points;
    static vector<int> p;
    static int n;
    static int q;
    static int qt;
}
mt19937 rng(time(0));
vector<pair<int, int>> ZapisiTacke(int n){
    vector<pii> v(n+1);
    v[1]={1,0};
    for(int i=2;i<=n;i++){
        v[i]={i,1};
    }
    return v;
}
vector<int> Resi(int n, int q){
    int x=Pitaj(1,2,3);
    int o=0;
    vector<int>p(n+1);
    if(!x){
        for(int i=4;i<=n;i++){
            x=Pitaj(1,2,i);
            if(x){
                o=i;break;
            }
        }
    }else{
        x=Pitaj(1,2,4);
        if(x){
            x=Pitaj(1,3,4);
            if(x){
                o=1;
            }else{
                o=2;
            }
        }else{
            o=3;
        }
    }
    vector<int>v;
    for(int i=1;i<=n;i++){
        if(o==i){continue;}
        v.push_back(i);
    }
    stack<pair<int,vector<int>>>s;
    s.push({1,v});
    //cout<<o<<'\n';
    p[o]=1;
    while(!s.empty()){
        int a;
        tie(a,v)=s.top();s.pop();
        int m=rng()%v.size();
        vector<int>v2,v3;
        for(int i=0;i<v.size();i++){
            if(v[i]==v[m]){
                continue;
            }
            //cout<<v[i]<<' ';
            int x=Pitaj(o,v[m],v[i]);
            //cout<<' '<<x<<'\n';
            if(x==-1){
                v3.push_back(v[i]);
            }else{
                v2.push_back(v[i]);
            }
        }
        if(!v2.empty()){
            s.push({a,v2});
        }if(!v3.empty()){
            s.push({a+v2.size()+1,v3});
        }
        p[v[m]]=a+v2.size()+1;
    }
    return p;
}