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

#define pb push_back
mt19937 rng(time(0));

vector<pair<int, int>> ZapisiTacke(int n){
    vector<pair<int, int>>tacke(n+1);
    int x=1000;
    int y=1,c=1;
    for(int i=1;i<=n;++i){
        tacke[i]={i*x,y};
        if(i>=3){
            y+=c;
            ++c;
        }
    }
    return tacke;
}

int PP[1005];

int ask(ll x,ll y,ll z){
    return Pitaj(PP[x],PP[y],PP[z])*-1;
}

vector<int> Resi(int n, int Q){
    for(int i=1;i<=n;++i)
        PP[i]=i;
    for(int i=n;i>=1;--i){
        ll j=rng();
        j=max(j,-j);
        j%=i;
        ++j;
        swap(PP[i],PP[j]);
    }
    while(1){
        if(ask(1,2,3))break;
        for(int i=1;i<=n;++i)
            PP[i]=i;
        for(int i=n;i>=1;--i){
            ll j=rng();
            j=max(j,-j);
            j%=i;
            ++j;
            swap(PP[i],PP[j]);
        }
    }
    vector<int>sol;
    sol.pb(1);
    sol.pb(2);
    for(int i=3;i<=n;++i){
        ll l=0,r=sol.size()-1;
        //posle gde cu da insterujem
        ll qu=ask(sol[0],sol.back(),i);
        if(!qu){
            if(ask(sol[0],sol[sol.size()-2],i)==-1
               &&ask(sol[1],sol.back(),i)==-1){
                sol.pb(i);continue;
               }
        }
        if(qu==-1){
            sol.pb(i);
            continue;
        }
        while(r-l>1){
            ll md=(l+r)/2;
            ll qu=ask(sol[l],sol[md],i);
            /*if(!qu){
                if(ask(sol[md],sol[r],i)!=-1)l=md;
                else r=md;
                continue;
            }*/
            if(qu!=-1)r=md;
            else l=md;
        }
        //sad je samo posle l
        sol.insert(sol.begin()+l+1,i);
        //cout<<endl;
        //for(ll x:sol)cout<<x<<' ';
        //cout<<endl<<endl;
    }
    vector<int>tmp;
    ll pos=0;
    for(int i=0;i<n;++i){
        if(!ask(sol[i],sol[(i+1)%n],sol[(i+2)%n])){
            pos=i;
            break;
        }
    }
    for(int i=pos;i<n;++i)
        tmp.pb(sol[i]);
    for(int i=0;i<pos;++i)
        tmp.pb(sol[i]);
    vector<int> resenje(n+1),ppos(n+1);
    for(int i=1;i<=n;++i)
        resenje[i]=PP[tmp[i-1]];
    for(int i=1;i<=n;++i)
        ppos[resenje[i]]=i;
    for(int i=1;i<=n;++i)
        resenje[i]=ppos[i];
    return resenje;
}