#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;
namespace {
enum dir {
ONE,
TWO,
THREE
};
}
void Anna(int N, int K, std::vector<int> R, std::vector<int> C) {
auto serialize = [&](const vector<dir> &val) {
int x = 0;
for (const dir &i : val) {
x = (3 * x + int(i));
}
return x + 1;
};
for (int r = 0; r < N; ++r) {
for (int c = 0; c < N; ++c) {
vector<dir> val;
for (int i = 0; i < K; ++i) {
if (c == C[i]) {
val.push_back(r <= R[i] ? ONE : TWO);
continue;
}
if (r == R[i]) {
if (abs(C[i] - c) % 2 == 0) {
val.push_back(THREE);
} else {
val.push_back(C[i] <= c ? ONE : TWO);
}
} else if (r == R[i] - 1) {
if (C[i] <= c) {
val.push_back(THREE);
} else {
val.push_back(ONE);
}
} else if (r == R[i] + 1) {
if (C[i] <= c) {
val.push_back(TWO);
} else {
val.push_back(THREE);
}
} else {
if (r <= R[i]) {
val.push_back(ONE);
} else {
val.push_back(TWO);
}
}
}
SetFlag(r, c, serialize(val));
}
}
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;
namespace {
enum dir {
ONE,
TWO,
THREE
};
}
vector<int> Bruno(int K, vector<int> value) {
auto unserialize = [&](int x) {
--x;
vector<dir> res;
for (int i = 0; i < 7; ++i) {
res.push_back(dir(x % 3));
x /= 3;
}
reverse(res.begin(), res.end());
return res;
};
vector<int> ans;
for (int i = 0; i < K; ++i) {
vector vals(3, vector<dir>(3));
for (int j = 0; j < 9; ++j) {
vals[j / 3][j % 3] = unserialize(value[j])[i];
}
if (vals[0]==vector<dir>{ONE,ONE,THREE}&&vals[2]==vector<dir>{THREE,TWO,TWO}) {
ans.push_back(4);continue;
}
if (vals[0]==vals[1]||vals[1]==vals[2]) {
if (vals[1][1]==ONE) {
ans.push_back(2);
} else {
ans.push_back(3);
}
continue;
}
if (vals[1]==vector<dir>{ONE,ONE,THREE}||vals[1]==vector<dir>{ONE,THREE,THREE}) {
ans.push_back(2);continue;
}
if (vals[1]==vector<dir>{THREE,TWO,TWO}||vals[1]==vector<dir>{THREE,THREE,TWO}) {
ans.push_back(3);continue;
}
if (vals[1]==vector<dir>{ONE,THREE,ONE}||vals[1]==vector<dir>{THREE,ONE,THREE}){
ans.push_back(1);continue;
}
if (vals[1]==vector<dir>{TWO,THREE,TWO}||vals[1]==vector<dir>{THREE,TWO,THREE}){
ans.push_back(0);continue;
}
if (vals[1][1]==TWO&&vals[0][1]==ONE&&vals[1][0]==THREE){
ans.push_back(0);continue;
}
if (vals[1][1]==ONE&&vals[1][2]==THREE&&vals[2][1]==TWO){
ans.push_back(1);continue;
}
cout<<"couldnt find match for:\n";
for (int i=0;i<3;++i){
for (int j=0;j<3;++j){
cout<<int(vals[i][j])+1;
}
cout<<'\n';
}
assert(false);
}
return ans;
}