#include <bits/stdc++.h>
using namespace std;
void send_packet(vector<bool> mes){
for(int i=0;i<31;i++)
cout<<mes[i]<<' ';
cout<<endl;
}
vector<bitset<14> > z={6631,3571,5866,7956,7658};
void send_message(vector<bool> M,vector<bool> C){
vector<int> con,unc;
for(int i=0;i<31;i++){
if(C[i])
con.push_back(i);
else
unc.push_back(i);
}
vector<pair<int,int> > b;
for(int i=0;i<30;i+=6){
int x=0;
for(int j=i;j<i+6;j++)
x=(x<<1)|C[j];
cout<<b.size()<<' '<<x<<endl;
b.push_back({x,b.size()});
}
sort(b.begin(),b.end(),greater<pair<int,int> >());
bitset<4> cl(M.size()%16);
bitset<6> cc((M.size()+15)/16);
cout<<cl<<' '<<cc<<endl;
int c=0;
for(int i=0;i<1024;c++){
vector<bool> mes;
while(!b.empty()&&b.back().first==c){
mes.resize(31);
int id=b.back().second;
int p=0;
for(int j:unc){
if(p<14)
mes[j]=z[id][p++];
else{
if(p==14&&id<4)
mes[j]=cl[id];
else if(p==14&&id==4)
mes[j]=cc[0];
else
mes[j]=cc[id+1];
p++;
}
// cout<<p<<' '<<id<<' '<<mes[j]<<endl;
}
send_packet(mes);
mes.clear();
b.pop_back();
}
mes.resize(31);
for(int j:unc){
mes[j]=(i<M.size()?M[i]:0);
i++;
}
send_packet(mes);
}
}
void dfs(int k,int c){
}
void receive_message(vector<vector<bool> > R){
}
int main(){
send_message({0, 1, 1, 0},{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1});
return 0;
}