#include "minerals.h"
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
const int maxn=86000;
int n;
int tmn[maxn+2];
void cek(vector<int>a,vector<int>b,bool type){
if(a.empty())return;
if(a.size()==1){
tmn[a[0]]=b[0]; return;
}
vector<int>a1,a2,b1,b2;
if(type==0){
// hapus
int sz=(sqrt(5)-1)/2 *a.size();
if(sz==0)sz++;
if(sz==a.size())sz--;
int prv;
for(int q=sz;q<a.size();q++){
prv=Query(a[q]);
}
for(int q=0;q<a.size();q++){
if(q<sz)a1.pb(a[q]);
else a2.pb(a[q]);
}
for(auto x : b){
if(a1.size()==b1.size()){
b2.pb(x);
continue;
}
else if(a2.size()==b2.size()){
b1.pb(x);
continue;
}
int brp=Query(x);
if(brp!=prv){
b2.pb(x);
}
else{
b1.pb(x);
}
prv=brp;
}
}
else{
// masuk
int sz=(3-sqrt(5))/2 *a.size();
if(sz==0)sz++;
if(sz==a.size())sz--;
int prv;
for(int q=0;q<sz;q++){
prv=Query(a[q]);
}
for(int q=0;q<a.size();q++){
if(q<sz)a1.pb(a[q]);
else a2.pb(a[q]);
}
for(auto x : b){
if(a1.size()==b1.size()){
b2.pb(x);
continue;
}
else if(a2.size()==b2.size()){
b1.pb(x);
continue;
}
int brp=Query(x);
if(brp!=prv){
b2.pb(x);
}
else{
b1.pb(x);
}
prv=brp;
}
}
cek(a1,b1,0);
cek(a2,b2,1);
}
void Solve(int N) {
n=N;
vector<int>grup[2];
int prv=0;
for(int q=1;q<=2*n;q++){
int tmp=Query(q);
if(prv==tmp){
grup[1].pb(q);
}
else{
grup[0].pb(q);
}
prv=tmp;
}
cek(grup[0],grup[1],0);
for(int q=1;q<=2*n;q++){
if(tmn[q]!=0){
Answer(q,tmn[q]);
}
}
}