#include <bits/stdc++.h>
using namespace std;
using ull = unsigned long long;
void Send(int a);
void Anna(int N, vector<char> S) {
ull fib[64];
fib[0] = 1;
fib[1] = 2;
for (int i = 2; i < 64; i++) {
fib[i] = fib[i - 1] + fib[i - 2];
}
vector<int> A(N, 0);
bool fx = true;
S.push_back('A');
bool flag = false;
for (int i = 0; i < N; i++) {
if (S[i] == 'X' && fx) {
A[i] = 1;
fx = false;
flag = (S[i + 1] == 'Z');
} else if (!fx && S[i] == 'Z' && S[i + 1] != 'Z' && A[i - 1] == 0) {
A[i] = 1;
}
}
while (A.size() % 63) {
A.push_back(0);
}
for (int i = 0; i < A.size(); i += 63) {
ull rank = 0;
for (int j = 0; j < 63; j++) {
if (A[i + j]) {
rank += fib[62 - j];
}
}
for (int j = 0; j < 44; j++) {
Send(rank >> j & 1);
}
}
Send(flag);
}
#include <bits/stdc++.h>
using namespace std;
void Remove(int d);
using ull = unsigned long long;
void Bruno(int N, int L, std::vector<int> A) {
L--;
bool flag = A.back();
ull fib[65];
fib[0] = 1;
fib[1] = 2;
for (int i = 2; i < 65; i++) {
fib[i] = fib[i - 1] + fib[i - 2];
}
vector<int> B;
for (int i = 0; i < L; i += 44) {
ull rank = 0;
for (int j = 0; j < 44; j++) {
if (A[i + j]) {
rank |= 1ull << j;
}
}
for (int j = 0; j < 63; j++) {
if (rank >= fib[62 - j]) {
B.push_back(1);
rank -= fib[62 - j];
} else {
B.push_back(0);
}
}
}
while (B.size() > N) {
B.pop_back();
}
A = B;
// for (int i = 0; i < N; i++) {
// cout << A[i] << " ";
// }
int pos = -1;
for (int i = 0; i < N; i++) {
if (A[i] == 1) {
pos = i;
break;
}
}
if (pos == -1) {
for (int i = 0; i < N; i++) {
Remove(i);
}
return;
}
vector<bool> del(N, false);
if (flag) {
Remove(pos + 1);
del[pos + 1] = true;
}
stack<int> st;
for (int i = pos + 1 + flag; i < N; i++) {
if (A[i] == 1) {
while (st.size()) {
Remove(st.top());
del[st.top()] = true;
st.pop();
}
Remove(i);
del[i] = true;
} else {
st.push(i);
}
}
for (int i = 0; i < N; i++) {
if (!del[i]) {
Remove(i);
}
}
}