#include <bits/stdc++.h>
#include "grader.cpp"
using namespace std;
int a[100011];
const int K=18;
void send_message(vector<bool> M,vector<bool> C)
{
// printf("send_message():\n");
// printf("M:");for(bool x:M)printf("%d",x);putchar(10);
// printf("C:");for(bool x:C)printf("%d",x);putchar(10);
mt19937 rnd(801);
vector<int> vs;
vs.clear();
for(int i=0;i<K;++i)vs.push_back(rnd()&(1<<16)-1);
// printf("vs:");for(int x:vs)printf("%d ",x);putchar(10);
for(int i=0;i<K;++i)
{
int pt=0;
vector<bool> msg(C.size(),0);
for(int j=0;j<C.size();++j)if(!C[j])msg[j]=vs[i]>>(pt++)&1;
send_packet(msg);
}
M.push_back(1);
int S=M.size(),pt=0;
for(int i=0;i<(M.size()+15)/16;++i)
{
int pt=0;
vector<bool> msg(C.size(),0);
for(int j=0;j<C.size();++j)if(!C[j])
{
if(pt<M.size())msg[j]=M[pt++];
}
send_packet(msg);
}
}
vector<bool> receive_message(vector<vector<bool>> R)
{
mt19937 rnd(801);
int a[16]={};
for(int i=0;i<K;++i)
{
int X=rnd()&(1<<16)-1;
for(int _=0;_<16;++_)if(X>>_&1)a[_]|=1<<i;
}
int b[31]={};
for(int i=0;i<31;++i)
{
for(int _=0;_<K;++_)b[i]=b[i]|R[_][i]<<_;
}
vector<bool> C(31,0);
int pt=0;
for(int i=0;i<C.size();++i)
{
if(pt<16&&a[pt]==b[i])C[i]=1,++pt;
}
vector<bool> M;
for(int i=K;i<R.size();++i)
{
for(int _=0;_<R[i].size();++_)if(C[_])M.push_back(R[i][_]);
}
while(!M.back())M.pop_back();
M.pop_back();
return M;
}