#include "Azzurro.h"
#include<bits/stdc++.h>
using namespace std;
vector<vector<int>> Azzurro(int N, int L, string S) {
vector<vector<int>> x(N, vector<int>(N, 0));
vector<int> val;
for (int i=0; i<L; i++)val.push_back((S[i] == 'B'));
x[0][0] = val[0];
int buff = 1;
for (int i=1; i<8; i++)
{
for (int j=0; j<7; j++)
{
if (buff==L)break;
x[i][j] = val[buff++];
}
}
x[N-1][N-1] = val.back();
for (int i=2; i<13; i++)
{
int a = 0, b = i;
if (i>7) a = i-7, b = 7;
int a2=a+2, b2=b-2;
while(a2<8 && b2>=0)
{
x[a][b] = x[a][b]^x[a2][b2];
a2+=2;
b2-=2;
}
}
return x;
}
#include "Bordeaux.h"
#include<bits/stdc++.h>
using namespace std;
namespace {
// グローバル変数と内部関数は無名名前空間内で宣言すること
// All global variables and internal functions should be declared in an unnamed namespace
int variable_example = 0;
int function_example(void) { return 0; }
}
string Bordeaux(int N, int L, vector<vector<int>> T) {
vector<int> xors(16);
string S, ab = "AB";
vector<vector<int>> x(N, vector<int> (N));
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++)
{
x[i][j] = T[i][j];
}
}
for (int i=1; i<14; i++)
{
int a = 0, b = i;
if (i>7) a = i-7, b = 7;
xors[i] = x[a][b];
a+=2, b-=2;
while(a<8 && b>=0)
{
xors[i] = xors[i]^x[a][b];
a+=2;
b-=2;
}
}
x[0][0] = 1 - x[0][0];
x[N-1][N-1] = 1 - x[N-1][N-1];
int a=0, b=0;
for (int i = 1; i<14; i++)
{
if (i<8)
{
if (xors[i] ^ (a%2))
b++;
else a++;
}
else
{
if (xors[i] ^ (b%2))
b++;
else a++;
}
x[a][b] = 1 - x[a][b];
}
if (L!=1)
S.push_back(ab[x[0][0]]);
for (int i=1; i<8; i++){
for (int j=0; j<7; j++){
if (S.size() == L-1)break;
S.push_back(ab[x[i][j]]);
}
}
S.push_back(ab[x[N-1][N-1]]);
return S;
}