#include "message.h"
#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back
void send_message(vector<bool> m, vector<bool> c){
vector<int> id(31, 1);
vector<vector<bool> > res(66, vector<bool>(31, 0));
for (int i=0; i<31; ++i)if (!c[i])while (c[(i+id[i])%31])++id[i];
m.pb(1);
while (m.size()<1025)m.pb(0);
for (int i=0; i<31; ++i)res[id[i]-1][i]=1;
for (int i=0, p=0; i<66; ++i)for (int j=0; j<31; ++j)if (!c[j]&&i>=id[j])res[i][j]=m[p], ++p;
for (auto c:res)send_packet(c);
}
vector<bool> receive_message(vector<vector<bool> > vect){
vector<bool> ans, c(31);
vector<int> id(31);
for (int i=0; i<31; ++i)for (int j=0; j<31; ++j)if (vect[j][i]){
id[i]=j+1;
break;
}
for (int i=0; i<31; ++i){
int node=i, cc=0;
vector<bool> visited(31, 0);
while (!visited[node])visited[node]=1, ++cc, node=(node+id[node])%31;
if (cc==16){
for (int i=0; i<31; ++i)c[i]=!visited[i];
break;
}
}
for (int i=0; i<66; ++i)for (int j=0; j<31; ++j)if (!c[j]&&i>=id[j])ans.pb(vect[i][j]);
while (!ans.back())ans.pop_back();
ans.pop_back();
return ans;
}