#include "Azzurro.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; }
vector<string> tab = {"OSSSSSSS","OOOOOOOS","XXXXXXOS","OOOOOXOS","XXXXOXOS","OOOXOXOS","XXOXOXOS","OXOXOXOO"};
}
vector<vector<int>> Azzurro(int N, int L, string S) {
S.resize(51,'A');
vector<vector<int>>res(8,vector<int>(8));
int idx=0;
for(int iL=0;iL<8;iL++){
int lig=iL,col=0;
int xorAct=0;
while(lig>=0 && col<8){
if(tab[lig][col] == 'S'){
res[lig][col] = xorAct;
}
else if(tab[lig][col] == 'O'){
res[lig][col] = (S[idx] == 'A' ? 0 : 1);
idx++;
}
else {
res[lig][col] = (S[idx] == 'A' ? 0 : 1);
idx++;
xorAct ^= res[lig][col];
}
lig--;
col++;
}
}
for(int iCol=1;iCol<8;iCol++){
int lig=7,col=iCol;
int xorAct=0;
while(lig>=0 && col<8){
if(tab[lig][col] == 'S'){
res[lig][col] = xorAct;
}
else if(tab[lig][col] == 'O'){
res[lig][col] = (S[idx] == 'A' ? 0 : 1);
idx++;
}
else {
res[lig][col] = (S[idx] == 'A' ? 0 : 1);
idx++;
xorAct ^= res[lig][col];
}
lig--;
col++;
}
}
// cerr<<L<<'\n';
// if(L == 1)
// for(int i=0;i<8;i++){
// for(int j=0;j<8;j++){
// cerr << res[i][j];
// }
// cerr<<'\n';
// }
return res;
}
#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; }
vector<string> tab = {"OSSSSSSS","OOOOOOOS","XXXXXXOS","OOOOOXOS","XXXXOXOS","OOOXOXOS","XXOXOXOS","OXOXOXOO"};
}
string Bordeaux(int N, int L, vector<vector<int>> T) {
vector<vector<int>>res = T;
string S;
vector<string>chemin(8,string(8,'O'));
chemin[0][0]='X';
int ligAct=0,colAct=0;
int idx=0;
for(int iL=1;iL<8;iL++){
int lig=iL,col=0;
int xorAct=0;
while(lig>=0 && col<8){
if(tab[lig][col] == 'X'){
xorAct ^= res[lig][col];
}
lig--;
col++;
}
lig++;col--;
if(xorAct == res[lig][col]){
if(ligAct!=7 && tab[ligAct+1][colAct] == 'O'){
ligAct++;
}
else{
colAct++;
}
}
else{
if(ligAct==7 || tab[ligAct+1][colAct] == 'O'){
colAct++;
}
else{
ligAct++;
}
}
chemin[ligAct][colAct]='X';
}
for(int iCol=1;iCol<7;iCol++){
int lig=7,col=iCol;
int xorAct=0;
while(lig>=0 && col<8){
if(tab[lig][col] == 'X'){
xorAct ^= res[lig][col];
}
lig--;
col++;
}
lig++;col--;
if(xorAct == res[lig][col]){
if(ligAct!=7 && tab[ligAct+1][colAct] == 'O'){
ligAct++;
}
else{
colAct++;
}
}
else{
if(ligAct==7 || tab[ligAct+1][colAct] == 'O'){
colAct++;
}
else{
ligAct++;
}
}
chemin[ligAct][colAct]='X';
}
chemin[7][7] = 'X';
string chaine;
idx=0;
for(int iL=0;iL<8;iL++){
int lig=iL,col=0;
while(lig>=0 && col<8){
if(tab[lig][col] == 'O' || tab[lig][col] == 'X'){
chaine.push_back((res[lig][col] ^ (chemin[lig][col] == 'X')) ? 'B' : 'A');
idx++;
if(idx == L) return chaine;
}
lig--;
col++;
}
}
for(int iCol=1;iCol<8;iCol++){
int lig=7,col=iCol;
while(lig>=0 && col<8){
if(tab[lig][col] == 'O' || tab[lig][col] == 'X'){
chaine.push_back((res[lig][col] ^ (chemin[lig][col] == 'X')) ? 'B' : 'A');
idx++;
if(idx == L) return chaine;
}
lig--;
col++;
}
}
return chaine;
}