#include "avoid.h"
#include <bits/stdc++.h>
using namespace std;
pair<int, int> scout(int R, int H){
if (R==10 && H==1){
for (int i=0; i<10; ++i){
vector<int> vv;
for (int j=1; j<=1000; ++j) if (j>>i&1) vv.push_back(j);
send(vv);
}
auto v=wait();
int ans=0;
for (int i=0; i<10; ++i) ans|=v[i]<<i;
return {ans, ans};
}
if (R==20 && H==20){
int l=1, r=1000;
while (l<=r){
int mid=(l+r)>>1;
vector<int> vv(mid-l+1);
iota(vv.begin(), vv.end(), l);
send(vv);
auto v=wait();
if (v[0]) r=mid-1;
else l=mid+1;
}
pair<int, int> ans={-1, -1};
ans.first=l;
l=ans.first+1, r=1000;
while (l<=r){
int mid=(l+r)>>1;
vector<int> vv(mid-l+1);
iota(vv.begin(), vv.end(), l);
send(vv);
auto v=wait();
if (v[0]) r=mid-1;
else l=mid+1;
}
ans.second=l;
if (ans.second==1001) ans.second=ans.first;
return ans;
}
if (R==30 && H==2){
for (int i=0; i<10; ++i){
vector<int> v0, v1;
for (int j=1; j<=1000; ++j){
if (j>>i&1) v1.push_back(j);
else v0.push_back(j);
}
send(v0); send(v1);
}
auto v=wait();
int msk=0, msk2=0;
vector<int> bits;
for (int i=0; i<10; ++i){
if (v[i<<1]!=v[i<<1|1]) msk|=v[i<<1|1]<<i;
else bits.push_back(i), msk2|=1<<i;
}
msk2|=msk;
if (bits.empty()) return {msk, msk};
else if ((int)bits.size()==1){
return {msk, msk|(1<<bits[0])};
}else{
pair<int, int> ans={msk, msk|(1<<bits[0])};
for (int i=1; i<(int)bits.size(); ++i){
vector<int> vv;
for (int j=1; j<=1000; ++j){
if ((j>>bits[i]&1)==0 && (j>>bits[0]&1)==0) vv.push_back(j);
}
send(vv);
}
v=wait();
for (int i=1; i<(int)bits.size(); ++i){
if (v[i-1]){
ans.second|=1<<bits[i];
}else{
ans.first|=1<<bits[i];
}
}
return ans;
}
}
for (int i=0; i<10; ++i){
vector<int> v0, v1;
for (int j=1; j<=1000; ++j){
if (j>>i&1) v1.push_back(j);
else v0.push_back(j);
}
send(v0); send(v1);
}
vector<pair<int, int>> pb;
for (int b1=0; b1<10; ++b1){
for (int b2=b1+1; b2<10; ++b2){
if (b1==3 && b2==6) continue;
pb.emplace_back(b1, b2);
vector<int> vv;
for (int j=1; j<=1000; ++j){
if ((j>>b1&1)==0 && (j>>b2&1)==0) vv.push_back(j);
}
send(vv);
}
}
auto v=wait();
int msk=0;
vector<int> bits;
for (int i=0; i<10; ++i){
if (v[i<<1]!=v[i<<1|1]) msk|=v[i<<1|1]<<i;
else bits.push_back(i);
}
if (bits.empty()) return {msk, msk};
else if ((int)bits.size()==1){
return {msk, msk|(1<<bits[0])};
}else{
pair<int, int> ans={msk, msk|(1<<bits[0])};
for (int i=1; i<(int)bits.size(); ++i){
if (v[20+find(pb.begin(), pb.end(), make_pair(bits[0], bits[i]))-pb.begin()]){
ans.second|=1<<bits[i];
}else{
ans.first|=1<<bits[i];
}
}
return ans;
}
}