#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#include "minerals.h"
mt19937 rng(chrono::high_resolution_clock().now().time_since_epoch().count());
int n;
vector<int>a,b;
int tur[86023],mx[86023];
int cev[86023];
int state[86023];
vector<int>v;
int s=0;
int query(int x){
state[x]^=1;
int t=Query(x);
swap(s,t);
return s!=t;
}
void f(int left,int right,vector<int>c){
assert(right - left + 1 == c.size());
if(c.size()==1){
cev[c[0]]=left;
return;
}
int mid=left+double((right-left)*62)/100;
for(int i=left;i<=right;i++){
if(i>mid)query(a[i]);
}
int cur=state[a[right]];
vector<int>aa,bb;
for(int x:c){
if(mx[x]<=mid)aa.pb(x);
}
for(int x:c){
if(mx[x]<=mid)continue;
if(aa.size()==(mid-left+1))bb.pb(x);
else if(bb.size()==right-mid)aa.pb(x);
else if(query(x)!=cur)bb.pb(x);
else aa.pb(x);
}
f(left,mid,aa);f(mid+1,right,bb);
}
void Solve(int N) {
n=N;
v.resize(2*n);
iota(v.begin(),v.end(),1);
shuffle(v.begin(),v.end(),rng);
for(int i=0;i<2*n;i++){
if(a.size()==n){
b.pb(v[i]);
mx[v[i]]=a.size()-1;
tur[v[i]]=1;
continue;
}
if(query(v[i])){
a.pb(v[i]);
continue;
}
b.pb(v[i]);
tur[v[i]]=1;
mx[v[i]]=a.size()-1;
}
f(0,n-1,b);
//cerr<<cnt<<endl;
for(int i=0;i<n;i++){
Answer(b[i],a[cev[b[i]]]);
}
}