#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
#include "voltage.h"
mt19937 rng(chrono::high_resolution_clock().now().time_since_epoch().count());
int rint(int a,int b){
int ans=0;
ans=a+(rng()%(b-a+1));
return ans;
}
int n,m;
vector<int>komsu[523],ters[523];
bool f(int x,int l,int r){
vector<int>v1(n,0),v2(n,0);
for(int i=l;i<=r;i++){
v1[i]=v2[i]=1;
}
v1[x]=0;
v2[x]=1;
for(int y:komsu[x]){
v1[y]=v2[y]=1;
}
for(int y:ters[x]){
v1[y]=v2[y]=0;
}
return query(v1,v2)==-1;
}
void dfs(int pos){
int las=-1;
while(las<n){
int l=las+1,r=n;
while(l<r){
int mi=(l+r)/2;
if(f(pos,las+1,mi))r=mi;
else l=mi+1;
}
if(l!=n&&f(pos,l,l)){
ters[pos].pb(l);
komsu[l].pb(pos);
dfs(l);
answer(l,pos);
m--;
}
else if(l!=n)break;
las=l;
}
}
bool solve(int N, int M){
n=N;
m=M;
for(int i=0;i<n;i++){
vector<int>v1(n,0),v2(n,0);
v1[i]=1;
if(query(v1,v2))continue;
dfs(i);
}
return !m;
}