#include "chameleon.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> ad[1005];
vector<int> concat(vector<int> vec, int x)
{
vec.push_back(x); return vec;
}
int ask(vector<int> p)
{
return p.size() - Query(p);
}
void Solve(int n) {
for(int i = 1; i <= 2*n; i++) ad[i].clear();
vector<vector<int>> vec(4);
for(int i = 1; i <= 2*n; i++){
set<int> occured;
for(int j = 0; j < 4; j++){
vector<int> cur = vec[j];
//get rid of the edges
while(ad[i].size() < 3 && ask(concat(cur, i)) > 0){
int l = 0, r = cur.size() - 1, p = -1;
while(l <= r){
int mid = (l+r)/2;
vector<int> question;
for(int k = 0; k <= mid; k++) question.push_back(cur[k]);
question.push_back(i);
if(ask(question) > 0){p = mid; r = mid-1;}
else l = mid+1;
}
int u = cur[p], v = i;
ad[u].push_back(v); ad[v].push_back(u);
cur.erase(cur.begin() + p);
occured.insert(j);
}
}
int p = 0;
while(occured.count(p) == 1) p++;
vec[p].push_back(i);
}
/*for(int u = 1; u <= 2*n; u++){
cerr<<"A"<<u<<endl;
for(int v : ad[u]) cerr<<v<<" ";
cerr<<endl;
}*/
//Now we have all edges, time to do some magic
set<pair<int, int>> directed;
for(int u = 1; u <= 2*n; u++) if(ad[u].size() == 3){
//If ad[u].size() == 1, we wont talk about that
int x1 = ad[u][0], x2 = ad[u][1], x3 = ad[u][2];
int y1 = ask({u, x2, x3}), y2 = ask({u, x1, x3}), y3 = ask({u, x1, x2});
int v = 0;
if(y1 == 2) v = x1;
else if(y2 == 2) v = x2;
else v = x3;
if(u < v) directed.insert({u, v});
else directed.insert({v, u});
}
//Find the pair
for(int u = 1; u <= 2*n; u++) for(int v : ad[u]) if(u < v && directed.count({u, v}) == 0){
Answer(u, v);
}
}