#include <bits/stdc++.h>
#define ENCODER
// #define DECODER
#define ll long long
#define el cout << endl
#define bit(mask, i) (((mask) >> (i)) & 1)
#define BIT(n) ((1ll) << (n))
#define ii pair<int, int>
#define fi first
#define se second
using namespace std;
const int maxlog = 8;
const int maxa = 256;
void send(int a);
void output(int b);
namespace SUBTASK_1
{
#ifdef ENCODER
namespace personA
{
void encode(int N, int M[])
{
int a = 0;
for (int i = 0; i < N; i++)
a += M[i] * BIT(i);
send(a);
}
}
#endif
#ifdef DECODER
namespace personB
{
void decode(int N, int L, int X[])
{
for (int i = 0; i < N; i++)
output(bit(X[0], i));
}
}
#endif
}
namespace SUBTASK_2
{
#ifdef ENCODER
namespace personA
{
void encode(int N, int M[])
{
for (int i = 0; i < N; i++)
send(i * 256 + M[i]);
}
}
#endif
#ifdef DECODER
namespace personB
{
void decode(int N, int L, int X[])
{
vector<ii> pr;
for (int i = 0; i < L; i++)
pr.push_back(ii(X[i] / 256, X[i] % 256));
sort(pr.begin(), pr.end());
for (int i = 0; i < N; i++)
output(pr[i].se);
}
}
#endif
}
namespace SUBTASK_34
{
#ifdef ENCODER
namespace personA
{
void encode(int N, int M[])
{
int block_size = maxa / N;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < maxlog; j++)
if (bit(M[i], j))
send(i * block_size + j);
}
}
}
#endif
#ifdef DECODER
namespace personB
{
void decode(int N, int L, int X[])
{
vector<ii> pr;
int block_size = maxa / N;
for (int i = 0; i < L; i++)
pr.push_back(ii(X[i] / block_size, X[i] % block_size));
sort(pr.begin(), pr.end());
for (int i = 0, j = 0; i < N; i++)
{
int ans = 0;
for (;j < L && pr[j].fi == i; j++)
ans += BIT(pr[j].se);
output(ans);
}
}
}
#endif
}
namespace SUBTASK_5
{
vector<int> a;
vector<vector<int>> seq;
bool comp(const vector<int> &a, const vector<int> &b)
{
if (a.size() != b.size())
return a.size() < b.size();
return a < b;
}
void recur(int pos, int k, int v, int last)
{
seq.push_back(a);
if (pos > k)
{
// for (int x : a)
// cout << x << ' ';
// el;
return ;
}
int ans = 0;
for (int x = last; x <= v; x++)
{
a.push_back(x);
recur(pos + 1, k, v, x);
a.pop_back();
}
}
void setup()
{
a.clear();
seq.clear();
recur(1, 12, 7, 0);
sort(seq.begin(), seq.end(), comp);
}
#ifdef ENCODER
namespace personA
{
void encode(int N, int M[])
{
int block_size = 2;
int pos_size = 5;
setup();
for (int i = 0; i < N; i += block_size)
{
ll val = 0;
for (int j = 0; j < block_size; j++)
{
int x = i + j < N ? M[i + j] : 0;
val = val * maxa + x;
}
vector<int> vt = seq[val];
// cout << "WANT SEND: " << val, el;
for (int x : vt)
send(i / 2 * BIT(maxlog - pos_size) + x);
}
}
}
#endif
#ifdef DECODER
namespace personB
{
void decode(int N, int L, int X[])
{
// cerr << "HELLO" << endl;
int block_size = 2;
int pos_size = 5;
setup();
vector<ii> pr;
for (int i = 0; i < L; i++)
pr.push_back(ii(X[i] / BIT(maxlog - pos_size), X[i] % BIT(maxlog - pos_size)));
sort(pr.begin(), pr.end());
// for (ii x : pr)
// cout << x.fi << ' ' << x.se, el;
vector<int> ans;
for (int i = 0, j = 0; i < N; i += block_size)
{
vector<int> vt;
for (; j < L && pr[j].fi == i / 2; j++)
vt.push_back(pr[j].se);
int val = lower_bound(seq.begin(), seq.end(), vt, comp) - seq.begin();
// cout << val, el;
vector<int> tmp;
for (int k = 0; k < block_size; k++, val /= maxa)
tmp.push_back(val % maxa);
reverse(tmp.begin(), tmp.end());
for (int x : tmp)
ans.push_back(x);
}
for (int i = 0; i < N; i++)
output(ans[i]);
}
}
#endif
}
#ifdef ENCODER
void encode(int N, int M[])
{
SUBTASK_5::personA::encode(N, M);
}
#endif
#ifdef DECODER
void decode(int N, int L, int X[])
{
SUBTASK_5::personB::decode(N, L, X);
}
#endif
#include <bits/stdc++.h>
// #define ENCODER
#define DECODER
#define ll long long
#define el cout << endl
#define bit(mask, i) (((mask) >> (i)) & 1)
#define BIT(n) ((1ll) << (n))
#define ii pair<int, int>
#define fi first
#define se second
using namespace std;
const int maxlog = 8;
const int maxa = 256;
void send(int a);
void output(int b);
namespace SUBTASK_1
{
#ifdef ENCODER
namespace personA
{
void encode(int N, int M[])
{
int a = 0;
for (int i = 0; i < N; i++)
a += M[i] * BIT(i);
send(a);
}
}
#endif
#ifdef DECODER
namespace personB
{
void decode(int N, int L, int X[])
{
for (int i = 0; i < N; i++)
output(bit(X[0], i));
}
}
#endif
}
namespace SUBTASK_2
{
#ifdef ENCODER
namespace personA
{
void encode(int N, int M[])
{
for (int i = 0; i < N; i++)
send(i * 256 + M[i]);
}
}
#endif
#ifdef DECODER
namespace personB
{
void decode(int N, int L, int X[])
{
vector<ii> pr;
for (int i = 0; i < L; i++)
pr.push_back(ii(X[i] / 256, X[i] % 256));
sort(pr.begin(), pr.end());
for (int i = 0; i < N; i++)
output(pr[i].se);
}
}
#endif
}
namespace SUBTASK_34
{
#ifdef ENCODER
namespace personA
{
void encode(int N, int M[])
{
int block_size = maxa / N;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < maxlog; j++)
if (bit(M[i], j))
send(i * block_size + j);
}
}
}
#endif
#ifdef DECODER
namespace personB
{
void decode(int N, int L, int X[])
{
vector<ii> pr;
int block_size = maxa / N;
for (int i = 0; i < L; i++)
pr.push_back(ii(X[i] / block_size, X[i] % block_size));
sort(pr.begin(), pr.end());
for (int i = 0, j = 0; i < N; i++)
{
int ans = 0;
for (;j < L && pr[j].fi == i; j++)
ans += BIT(pr[j].se);
output(ans);
}
}
}
#endif
}
namespace SUBTASK_5
{
vector<int> a;
vector<vector<int>> seq;
bool comp(const vector<int> &a, const vector<int> &b)
{
if (a.size() != b.size())
return a.size() < b.size();
return a < b;
}
void recur(int pos, int k, int v, int last)
{
seq.push_back(a);
if (pos > k)
{
// for (int x : a)
// cout << x << ' ';
// el;
return ;
}
int ans = 0;
for (int x = last; x <= v; x++)
{
a.push_back(x);
recur(pos + 1, k, v, x);
a.pop_back();
}
}
void setup()
{
a.clear();
seq.clear();
recur(1, 12, 7, 0);
sort(seq.begin(), seq.end(), comp);
}
#ifdef ENCODER
namespace personA
{
void encode(int N, int M[])
{
int block_size = 2;
int pos_size = 5;
setup();
for (int i = 0; i < N; i += block_size)
{
ll val = 0;
for (int j = 0; j < block_size; j++)
{
int x = i + j < N ? M[i + j] : 0;
val = val * maxa + x;
}
vector<int> vt = seq[val];
// cout << "WANT SEND: " << val, el;
for (int x : vt)
send(i / 2 * BIT(maxlog - pos_size) + x);
}
}
}
#endif
#ifdef DECODER
namespace personB
{
void decode(int N, int L, int X[])
{
// cerr << "HELLO" << endl;
int block_size = 2;
int pos_size = 5;
setup();
vector<ii> pr;
for (int i = 0; i < L; i++)
pr.push_back(ii(X[i] / BIT(maxlog - pos_size), X[i] % BIT(maxlog - pos_size)));
sort(pr.begin(), pr.end());
// for (ii x : pr)
// cout << x.fi << ' ' << x.se, el;
vector<int> ans;
for (int i = 0, j = 0; i < N; i += block_size)
{
vector<int> vt;
for (; j < L && pr[j].fi == i / 2; j++)
vt.push_back(pr[j].se);
int val = lower_bound(seq.begin(), seq.end(), vt, comp) - seq.begin();
// cout << val, el;
vector<int> tmp;
for (int k = 0; k < block_size; k++, val /= maxa)
tmp.push_back(val % maxa);
reverse(tmp.begin(), tmp.end());
for (int x : tmp)
ans.push_back(x);
}
for (int i = 0; i < N; i++)
output(ans[i]);
}
}
#endif
}
#ifdef ENCODER
void encode(int N, int M[])
{
SUBTASK_5::personA::encode(N, M);
}
#endif
#ifdef DECODER
void decode(int N, int L, int X[])
{
SUBTASK_5::personB::decode(N, L, X);
}
#endif