#include "message.h"
#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<ll, ll>
const long mxN = 2e5 + 7;
bool Check_bit(int u, int v)
{
return (u >> v) & 1;
}
vector<bool> all(bool tt)
{
vector<bool> res;
for (int i = 0; i < 31; i++)
res.push_back(tt);
return res;
}
void send_message(std::vector<bool> M, std::vector<bool> C)
{
int val = M.back() ^ 1;
while (M.size() < 1025)
M.push_back(val);
vector<int> vt;
for (int j = 0; j < C.size(); j++)
{
C[j] = !C[j];
if (!C[j])
continue;
vt.push_back(j);
}
// cerr << "VT ";
// for (int i : vt)
// cerr << i << " ";
// cerr << '\n';
for (int i = 0; i < 4; i++)
send_packet(all(Check_bit(vt[0], i)));
vector<vector<bool>> res;
for (int i = 0; i < 66; i++)
res.push_back(C);
vector<bool> nw;
for (bool j : C)
nw.push_back(j);
for (bool j : M)
nw.push_back(j);
for (int i = 0; i < nw.size(); i++)
res[i % 66][vt[i / 66]] = nw[i];
for (vector<bool> i : res)
send_packet(i);
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> R)
{
vector<int> vt;
int stt = 0;
for (int i = 0; i < 4; i++)
{
int cnt = 0;
for (int j : R[i])
{
if (j)
cnt++;
else
cnt--;
}
if (cnt > 0)
stt += (1 << i);
}
vector<bool> ans;
for (int i = 0; i < 16; i++)
{
if (vt.size())
stt = vt[i];
for (int j = 4; j < 70; j++)
{
if (R[j][stt])
vt.push_back(j - 4);
ans.push_back(R[j][stt]);
}
}
// cerr << "C: ";
// for (int j = 0; j < 16; j++)
// cerr << vt[j] << " ";
// cerr << '\n';
vector<bool> nw;
for (int i = 31; i < ans.size(); i++)
nw.push_back(ans[i]);
ans = nw;
int tmp = ans.back();
while (ans.back() == tmp)
ans.pop_back();
return ans;
}