#include "voltage.h"
#include <bits/stdc++.h>
using namespace std;
int n, m, out[505], vis[505], gone[505];
bool solve(int N, int M) {
std::vector<int> x(N, 0);
std::vector<int> y(N, 1);
n = N, m = M;
queue <int> q;
for (int i = 0; i < N; i++) out[i] = vis[i] = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) y[j] = 1;
y[i] = 0;
int res = query(x, y);
if (res == 0) {
q.push(i);
gone[i] = 1;
}
for (int j = 0; j < N; j++) y[j] = 0;
y[i] = 1;
res = query(x, y);
if (res == 0) {
out[i] = 1;
}
}
if (q.empty()) return false;
vector <pair <int, int> > ans;
while (!q.empty()) {
int a = q.front(); q.pop();
if (vis[a]) continue;
vis[a] = 1;
vector <int> p;
for (int i = 0; i < N; i++) if (!vis[i]) p.push_back(i);
if (p.empty()) break;
int lst = 0;
while (1) {
int lo = lst, hi = (int)p.size() - 1, grr = hi + 1;
while (lo <= hi) {
int mid = (lo + hi) >> 1;
vector <int> t1(n, 0);
for (int i = 0; i < lst; i++) t1[p[i]] = 1;
for (int i = mid + 1; i < (int)p.size(); i++) t1[p[i]] = 1;
vector <int> t2 = t1;
t2[a] = 1;
int res = query(t1, t2);
if (res == 1) {
grr = mid, hi = mid - 1;
}
else lo = mid + 1;
}
if (grr != (int)p.size()) {
ans.push_back({a, p[grr]});
vector <int> t1(n, 0), t2(n, 0);
for (int j = 0; j < N; j++) t1[j] = (vis[j] ? 0 : 1);
t2 = t1;
t2[p[grr]] = 0;
int res = query(t1, t2);
if (res == 0) {
q.push(p[grr]);
}
lst = grr + 1;
}
else break;
}
}
if ((int)ans.size() < M) return false;
for (auto [a, b] : ans) answer(a, b);
return true;
}