#include <vector>
#include "library.h"
using namespace std;
int N;
int adj[1005][2];
bool has_neighbor(int i, const vector<int>& S)
{
if(S.empty()) return false;
vector<int> M(N,0);
for(int v : S) M[v] = 1;
int q1 = Query(M);
M[i] = 1;
int q2 = Query(M);
int neighbors = q1 + 1 - q2;
return neighbors > 0;
}
int find_neighbor(int i, vector<int> S)
{
if(S.size() == 1)
return S[0];
int mid = S.size()/2;
vector<int> A(S.begin(), S.begin()+mid);
vector<int> B(S.begin()+mid, S.end());
if(has_neighbor(i,A))
return find_neighbor(i,A);
else
return find_neighbor(i,B);
}
void Solve(int n)
{
N = n;
for(int i=0;i<N;i++)
adj[i][0]=adj[i][1]=-1;
vector<int> all;
for(int i=0;i<N;i++) all.push_back(i);
for(int i=0;i<N;i++)
{
vector<int> cand;
for(int j=0;j<N;j++)
if(j!=i) cand.push_back(j);
for(int k=0;k<2;k++)
{
if(!has_neighbor(i,cand)) break;
int nb = find_neighbor(i,cand);
if(adj[i][0]==-1) adj[i][0]=nb;
else adj[i][1]=nb;
if(adj[nb][0]==-1) adj[nb][0]=i;
else adj[nb][1]=i;
vector<int> next;
for(int v : cand)
if(v!=nb) next.push_back(v);
cand.swap(next);
}
}
int start = 0;
for(int i=0;i<N;i++)
if(adj[i][1]==-1)
{
start = i;
break;
}
vector<int> res;
vector<bool> vis(N,false);
while(true)
{
res.push_back(start+1);
vis[start]=true;
int nxt=-1;
if(adj[start][0]!=-1 && !vis[adj[start][0]])
nxt=adj[start][0];
else if(adj[start][1]!=-1 && !vis[adj[start][1]])
nxt=adj[start][1];
if(nxt==-1) break;
start=nxt;
}
Answer(res);
}