#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);
adj.resize(N);
n=N;
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;
}
}
if(N<=2) return void(Answer(st));
for(int i=0;i<N;i++){
if(adj[i].size()==2||((i==st[0]||i==st[1])&&!adj[i].empty())) continue;
F(0,N-1,i);
}
int now=st[0],p=-1;
while(ret.size()<N){
ret.push_back(now+1);
for(int x:adj[now]){
if(x==p) continue;
p=now;
now=x;
break;
}
}
// for(int i=0;i<N;i++){
// cout<<i<<'\n';
// for(int x:adj[i]) cout<<x<<' ';
// cout<<'\n';
// }
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);*/