#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
#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 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;
}
int cnt=0;
int bit=0;
while((1<<bit)<n)bit++;
bit--;
for(;bit>=0;bit--){
for(int i=0;i<n;i++){
if(state[a[i]]==((i>>bit)&1)){
query(a[i]);
cnt++;
}
}
for(int i=0;i<n;i++){
if(mx[b[i]]<(1<<bit))continue;
if(query(b[i])){
cev[b[i]]^=(1<<bit);
mx[b[i]]^=(1<<bit);
}
else{
mx[b[i]]=(1<<bit)-1;
}
}
}
//cerr<<cnt<<endl;
for(int i=0;i<n;i++){
Answer(b[i],a[cev[b[i]]]);
}
}