#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 maxn = 64;
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
{
const int maxk = 20;
const int maxv = 15;
ll dp[maxk + 10][maxv + 10], sum[maxk + 10];
void setup()
{
memset(sum, 0, sizeof sum);
memset(dp, 0, sizeof dp);
sum[0] = 1;
dp[0][0] = 1;
for (int i = 1; i <= maxk; i++)
{
for (int j = 0; j <= maxv; j++)
{
if (i == 1)
dp[i][j] = 1;
else
{
for (int k = j; k <= maxv; k++)
dp[i][j] += dp[i - 1][k];
}
sum[i] += dp[i][j];
}
}
}
vector<int> findKth(int len, ll k)
{
vector<int> ans;
for (int i = len; i >= 1; i--)
{
for (int j = i == len ? 0 : ans.back(); j <= maxv; j++)
{
if (k >= dp[i][j])
k -= dp[i][j];
else
{
ans.push_back(j);
break;
}
}
}
return ans;
}
vector<int> findKth(ll k)
{
for (int i = 0; i <= maxk; i++)
if (k >= sum[i])
k -= sum[i];
else
return findKth(i, k);
return {};
}
ll get_rank(vector<int> p)
{
int len = p.size();
ll ans = 0;
for (int i = 0; i < len; i++)
{
ans += sum[i];
for (int j = i == 0 ? 0 : p[i - 1]; j < p[i]; j++)
ans += dp[len - i][j];
}
return ans;
}
#ifdef ENCODER
namespace personA
{
void encode(int N, int M[])
{
int block_size = 4;
int pos_size = 4;
setup();
for (int i = 0; i < N; i += block_size)
{
ll val = 0;
for (int j = block_size - 1; j >= 0; j--)
{
int x = i + j < N ? M[i + j] : 0;
val = val * maxa + x;
}
vector<int> vt = findKth(val);
// cout << "WANT SEND: " << val, el;
for (int x : vt)
send(i / 4 * BIT(maxlog - pos_size) + x);
}
}
}
#endif
#ifdef DECODER
namespace personB
{
void decode(int N, int L, int X[])
{
// cerr << "HELLO" << endl;
int block_size = 4;
int pos_size = 4;
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 / 4; j++)
vt.push_back(pr[j].se);
// for (int x : vt)
// cout << x << ' ';
// el;
ll val = get_rank(vt);
// cout << val << ' ' << get_rank(vt), el;
for (int k = 0; k < block_size; k++, val /= maxa)
ans.push_back(val % maxa);
}
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 maxn = 64;
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
{
const int maxk = 20;
const int maxv = 15;
ll dp[maxk + 10][maxv + 10], sum[maxk + 10];
void setup()
{
memset(sum, 0, sizeof sum);
memset(dp, 0, sizeof dp);
sum[0] = 1;
dp[0][0] = 1;
for (int i = 1; i <= maxk; i++)
{
for (int j = 0; j <= maxv; j++)
{
if (i == 1)
dp[i][j] = 1;
else
{
for (int k = j; k <= maxv; k++)
dp[i][j] += dp[i - 1][k];
}
sum[i] += dp[i][j];
}
}
}
vector<int> findKth(int len, ll k)
{
vector<int> ans;
for (int i = len; i >= 1; i--)
{
for (int j = i == len ? 0 : ans.back(); j <= maxv; j++)
{
if (k >= dp[i][j])
k -= dp[i][j];
else
{
ans.push_back(j);
break;
}
}
}
return ans;
}
vector<int> findKth(ll k)
{
for (int i = 0; i <= maxk; i++)
if (k >= sum[i])
k -= sum[i];
else
return findKth(i, k);
return {};
}
ll get_rank(vector<int> p)
{
int len = p.size();
ll ans = 0;
for (int i = 0; i < len; i++)
{
ans += sum[i];
for (int j = i == 0 ? 0 : p[i - 1]; j < p[i]; j++)
ans += dp[len - i][j];
}
return ans;
}
#ifdef ENCODER
namespace personA
{
void encode(int N, int M[])
{
int block_size = 4;
int pos_size = 4;
setup();
for (int i = 0; i < N; i += block_size)
{
ll val = 0;
for (int j = block_size - 1; j >= 0; j--)
{
int x = i + j < N ? M[i + j] : 0;
val = val * maxa + x;
}
vector<int> vt = findKth(val);
// cout << "WANT SEND: " << val, el;
for (int x : vt)
send(i / 4 * BIT(maxlog - pos_size) + x);
}
}
}
#endif
#ifdef DECODER
namespace personB
{
void decode(int N, int L, int X[])
{
// cerr << "HELLO" << endl;
int block_size = 4;
int pos_size = 4;
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 / 4; j++)
vt.push_back(pr[j].se);
// for (int x : vt)
// cout << x << ' ';
// el;
ll val = get_rank(vt);
// cout << val << ' ' << get_rank(vt), el;
for (int k = 0; k < block_size; k++, val /= maxa)
ans.push_back(val % maxa);
}
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