#include<bits/stdc++.h>
#include "library.h"
using namespace std;
int n;
vector<int> st;
vector<set<int>> adj;
void F(int l,int r,int x){
vector<int> L(n),R(n);
if(l==r){
if(l==x||adj[l].count(x)) return;
L[x]=L[l]=1;
if(Query(L)==1){
adj[x].insert(l);
adj[l].insert(x);
}
return;
}
int mid=(l+r)/2;
L[st[0]]=L[st[1]]=R[st[0]]=R[st[1]]=L[x]=1;
for(int i=l;i<=mid;i++) L[i]=R[i]=1;
R[x]=0;
int W=Query(L);
int Z=Query(R);
if(W>=Z) F(mid+1,r,x);
if(W<=Z) F(l,mid,x);
}
//4 2 5 3 1
void Solve(int N){
vector<int> ret,Ask(N,1),used(N);
adj.resize(N);
n=N;
if(N==1) return void(Answer({1}));
if(N==2) return void(Answer({1,2}));
for(int i=0;i<N;i++){
Ask[i]=0;
int x=Query(Ask);
Ask[i]=1;
if(x==1){
st.push_back(i);
if(st.size()==2) break;
}
}
ret.push_back(st[0]);
used[st[0]]=1;
int now=st[0];
vector<int> ask(N),a2(N),B;
while(ret.size()<N-1){
// cout<<now<<'\n';
for(int i=0;i<n;i++) if(!used[i]) B.push_back(i);
int l=0,r=B.size()-1,mid,ans=0;
while(l<=r){
mid=(l+r)/2;
for(int i=0;i<n;i++){
if((B[l]<=i&&i<=B[mid])||used[i]) ask[i]=1;
else ask[i]=0;
}
ask[st[1]]=0;
a2=ask;
a2[ret.back()]=0;
int X=Query(ask),Y=Query(a2);
if(ret.size()==1){
if(X==Y) ans=B[mid],r=mid-1;
else l=mid+1;
}
else{
if(Y>X) ans=B[mid],r=mid-1;
else l=mid+1;
}
}
used[ans]=1;
now=ans;
ret.push_back(ans);
B.clear();
}
ret.push_back(st[1]);
for(int &x:ret) x++;
Answer(ret);
}
/*
vector<int> M(N);
vector<vector<int>> adj(N);
for(int i=0;i<N;i++){
M[i]=1;
for(int j=i+1;j<N;j++){
if(adj[j].size()>=2) continue;
M[j]=1;
int x=Query(M);
M[j]=0;
if(x==1) adj[i].push_back(j),adj[j].push_back(i);
}
M[i]=0;
}
vector<int> vis(N);
int st;
for(int i=0;i<N;i++){
if(adj[i].size()<=1){
st=i;
break;
}
}
vector<int> res;
vis[st]=1;
res.push_back(st+1);
while(res.size()<N){
for(int x:adj[st]){
if(vis[x]) continue;
st=x;
vis[st]=1;
res.push_back(st+1);
break;
}
}
Answer(res);*/