#include "voltage.h"
#include<bits/stdc++.h>
using namespace std;
int n;
int m;
vector<int> wut(0);
vector<int> banana[2000];
vector<pair<int,int>> ans(0);
int compare(int a, int b) {
vector<int> x(n);
vector<int> y(n);
for(int v: wut) {
x[v] = 1;
y[v] = 1;
}
x[a] = 1;
y[b] = 1;
return query(x,y);
}
void dudesort(vector<int>& haha) {
if(haha.size() <= 1) {
return;
}
int k = haha.size();
vector<int> a(0);
vector<int> b(0);
for(int i = 0; i < k/2; i++) {
a.push_back(haha[i]);
}
for(int i = k/2; i < k; i++) {
b.push_back(haha[i]);
}
dudesort(a);
dudesort(b);
int y1 = 0,y2 = 0;
for(int i = 0; i < k; i++) {
if(y1 == a.size()) {
haha[i] = b[y2];
y2++;
}
else if(y2 == b.size()) {
haha[i] = a[y1];
y1++;
}
else {
if(compare(a[y1],b[y2]) == 1) {
haha[i] = a[y1];
y1++;
}
else {
haha[i] = b[y2];
y2++;
}
}
}
}
void troll(int p) {
for(int i = p+1; i <= n; i++) {
for(int v: banana[i]) {
banana[i-1].push_back(v);
}
banana[i].clear();
}
}
void upd(int x) {
int p = -1;
for(int i = 0; i <= n; i++) {
for(int v: banana[i]) {
if(v == x) {
p = i;
}
}
}
vector<int> idk(0);
for(int v: banana[p]) {
if(v != x) {
idk.push_back(v);
}
}
banana[p] = idk;
if(banana[p].empty()) {
troll(p);
}
if(p == 0 || compare(banana[p-1][0],x) != 0) {
for(int i = n; i >= p+1; i--) {
for(int v: banana[i-1]) {
banana[i].push_back(v);
}
banana[i-1].clear();
}
banana[p].push_back(x);
}
else {
banana[p-1].push_back(x);
}
}
bool solve(int N, int M) {
n = N;
m = M;
vector<int> haha(0);
for(int i = 0; i < n; i++) {
haha.push_back(i);
}
dudesort(haha);
int y = 0;
for(int i = 0; i < n; i++) {
if(i > 0 && compare(haha[i],haha[i-1]) != 0) {
y++;
}
banana[y].push_back(haha[i]);
}
for(int i = 0; i < n; i++) {
vector<int> x(n);
vector<int> y(n);
int c = banana[0][banana[0].size()-1];
banana[0].pop_back();
if(banana[0].empty()) {
troll(0);
}
for(int v: wut) {
x[v] = 1;
}
x[c] = 1;
if(query(x,y) != 0) {
return false;
}
vector<int> wow(0);
for(int j = 0; j <= n; j++) {
for(int v: banana[j]) {
wow.push_back(v);
}
}
int t = 0;
vector<int> q(0);
while(t < wow.size()) {
for(int i = 0; i < n; i++) {
x[i] = 0;
y[i] = 0;
}
int l = t,r = wow.size()-1;
for(int v: wut) {
y[v] = 1;
x[v] = 1;
}
for(int i = 0; i < t; i++) {
y[wow[i]] = 1;
}
for(int i = 0; i < wow.size(); i++) {
x[wow[i]] = 1;
}
if(query(x,y) == 0) {
break;
}
while(l < r) {
int mid = (l+r)/2;
x = y;
for(int j = 0; j <= mid; j++) {
x[wow[j]] = 1;
}
if(query(x,y) == 0) {
l = mid+1;
}
else {
r = mid;
}
}
q.push_back(wow[l]);
ans.push_back({wow[l],c});
t = l+1;
}
wut.push_back(c);
for(int v: q) {
upd(v);
}
}
for(int i = 0; i < ans.size(); i++) {
answer(ans[i].first,ans[i].second);
}
return true;
}