#include "Anna.h"
#include <vector>
void Anna(int N, std::vector<char> S) {
for (int i = 0; i < N; ++i) {
int x = S[i] - 'X';
for (int bt = 1; bt >= 0; --bt) {
Send(!!(x & 1 << bt));
}
}
}
#include "Bruno.h"
#include <vector>
using namespace std;
void Bruno(int N, int L, std::vector<int> A) {
vector<char> a(N);
for (int i = 0; i < N; ++i) {
a[i] = (A[2 * i] << 1) + A[2 * i + 1] + 'X';
}
vector<int> dp(1 << N);
for (int mask = 1; mask < 1 << N; ++mask) {
for (int i = 0; i < N; ++i) {
if (!(mask & 1 << i)) {
continue;
}
dp[mask] = max(dp[mask], dp[mask ^ (1 << i)]);
if (a[i] != 'Y') {
continue;
}
int lef = -1, rig = -1;
for (int j = 0; j < i; ++j) {
if (mask & 1 << j) {
lef = j;
}
}
for (int j = N - 1; j > i; --j) {
if (mask & 1 << j) {
rig = j;
}
}
if (lef != -1 && rig != -1 && a[lef] == 'X' && a[rig] == 'Z') {
dp[mask] = max(dp[mask], dp[mask ^ (1 << i)] + 1);
}
}
}
int mask = (1 << N) - 1;
while (mask) {
for (int i = 0; i < N; ++i) {
if (!(mask & 1 << i)) {
continue;
}
if (dp[mask] == dp[mask ^ (1 << i)]) {
Remove(i);
mask ^= 1 << i;
break;
}
if (a[i] != 'Y') {
continue;
}
int lef = -1, rig = -1;
for (int j = 0; j < i; ++j) {
if (mask & 1 << j) {
lef = j;
}
}
for (int j = N - 1; j > i; --j) {
if (mask & 1 << j) {
rig = j;
}
}
if (lef != -1 && rig != -1 && a[lef] == 'X' && a[rig] == 'Z' && dp[mask] == dp[mask ^ (1 << i)] + 1) {
Remove(i);
mask ^= 1 << i;
break;
}
}
}
}