This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "chameleon.h"
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3+5;
namespace {
	vector<int> g[maxn];
}  // namespace
int bs_edge(vector<int> vec, int x){
	int l = 0, r = vec.size()-2;
	while(l < r){
		int mid = (l+r+1)>>1;
		vector<int> nw(vec.begin(), vec.begin()+mid);
		nw.push_back(x);
		if(Query(nw) != nw.size())r = mid-1;
		else l = mid;
	}
	return vec[l];
}
void get_edge(vector<int> vec, int d = 2){
	vector<int> bp, oth;
	for(auto v: vec){
		bp.push_back(v);
		if(Query(bp) != bp.size()){
			bp.pop_back();
			oth.push_back(v);
		}
	}
	vector<int> rmv;
	for(auto v: oth){
		vector<int> nw = bp;
		nw.push_back(v);
		bool first = 1;
		while(g[v].size() < 3 && (first || Query(nw) != nw.size())){
			first = 0;
			int tmp = bs_edge(nw, v);
			nw.erase(find(nw.begin(), nw.end(), tmp));
			g[tmp].push_back(v);
			g[v].push_back(tmp);
		}
		if(g[v].size() == 3)rmv.push_back(v);
	}
	for(auto v: rmv)oth.erase(find(oth.begin(), oth.end(), v));
	if(d)get_edge(oth, d-1);
}
void Solve(int N) {
	set<pair<int, int>> bad;
	
	vector<int> vec(N*2);
	iota(vec.begin(), vec.end(), 1);
	get_edge(vec);
	for(int i = 1; i <= 2*N; i++){
		if(g[i].size() == 3){
			g[i].push_back(i);
			for(int j = 0; j < 3; j++){
				vector<int> nw = g[i];
				nw.erase(nw.begin() + j);
				if(Query(nw) == 1){
					bad.insert({i, g[i][j]});
					bad.insert({g[i][j], i});
				}
			}
			g[i].pop_back();
		}
	}
	for(int i = 1; i <= 2*N; i++){
		for(int v: g[i]){
			if(v > i)continue;
			if(bad.find({v, i}) == bad.end()){
				Answer(v, i);
			}
		}
	}
}
Compilation message (stderr)
chameleon.cpp: In function 'int bs_edge(std::vector<int>, int)':
chameleon.cpp:17:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |   if(Query(nw) != nw.size())r = mid-1;
      |      ~~~~~~~~~~^~~~~~~~~~~~
chameleon.cpp: In function 'void get_edge(std::vector<int>, int)':
chameleon.cpp:27:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |   if(Query(bp) != bp.size()){
      |      ~~~~~~~~~~^~~~~~~~~~~~
chameleon.cpp:37:48: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |   while(g[v].size() < 3 && (first || Query(nw) != nw.size())){
      |                                      ~~~~~~~~~~^~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |