#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;
namespace {
const int maxn = 105;
int n, k;
vector<int> r, c;
vector<int> winx[5] = {{},
{-1, 0, 0, 0, 1, 1, 1},
{-1, -1, 0, 0, 1, 1, 1},
{-1, -1, 0, 0, 1, 1, 1},
{-1, -1, 0, 0, 1, 1, 1}
};
vector<int> winy[5] = {{},
{1, -1, 0, 1, -1, 0, 1},
{0, 1, 0, 1, -1, 0, 1},
{0, 1, -1, 1, -1, 0, 1},
{-1, 1, 0, 1, -1, 0, 1}
};
int a[maxn][maxn], markx, marky;
int pos(int x, int y) {
return ((x - markx + 3) % 3) * 3 + ((y - marky + 3) % 3);
}
} // namespace
void Anna(int N, int K, vector<int> R, vector<int> C) {
n = N, r = R, c = C;
for (int kk=1;kk<=4;kk++) for (int ii=0;ii<3;ii++) for (int jj=0;jj<3;jj++) {
k = kk, markx = ii, marky = jj;
bool ok = true;
for (int i=0;i<n;i++) for (int j=0;j<n;j++) {
int id = pos(i, j);
if (id == 0) a[i][j] = 12;
else if (id == 1) a[i][j] = k;
else {
id -= 2;
if (abs(r[id] - i) <= 1 && abs(c[id] - j) <= 1) {
a[i][j] = -1;
for (int l=0;l<7;l++) {
int curx = i + winx[k][l], cury = j + winy[k][l];
if (curx == r[id] && cury == c[id]) {
a[i][j] = l + 5;
break;
}
}
if (a[i][j] == -1) ok = false;
} else {
if (c[id] - 2 >= j) a[i][j] = 1;
else if (c[id] + 2 <= j) a[i][j] = 2;
else if (r[id] - 2 >= i) a[i][j] = 3;
else a[i][j] = 4;
}
}
}
if (ok) {
for (int i=0;i<n;i++) for (int j=0;j<n;j++) SetFlag(i, j, a[i][j]);
return;
}
}
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;
namespace {
struct tile {
int val, x, y;
};
vector<int> winx[5] = {{},
{-1, 0, 0, 0, 1, 1, 1},
{-1, -1, 0, 0, 1, 1, 1},
{-1, -1, 0, 0, 1, 1, 1},
{-1, -1, 0, 0, 1, 1, 1}
};
vector<int> winy[5] = {{},
{1, -1, 0, 1, -1, 0, 1},
{0, 1, 0, 1, -1, 0, 1},
{0, 1, -1, 1, -1, 0, 1},
{-1, 1, 0, 1, -1, 0, 1}
};
} // namespace
vector<int> Bruno(int K, vector<int> vec) {
tile b[3][3];
for (int i=0;i<9;i++) b[i/3][i%3] = {vec[i], i/3, i%3};
while (b[0][0].val != 12 && b[0][1].val != 12 && b[0][2].val != 12) {
for (int i=0;i<3;i++) swap(b[0][i], b[1][i]);
for (int i=0;i<3;i++) swap(b[1][i], b[2][i]);
}
while (b[0][0].val != 12) {
for (int i=0;i<3;i++) swap(b[i][0], b[i][1]);
for (int i=0;i<3;i++) swap(b[i][1], b[i][2]);
}
int k = b[0][1].val;
vector<int> ans(7);
for (int i=0;i<7;i++) {
tile cur = b[(i+2)/3][(i+2)%3];
int val = cur.val;
if (val <= 4) ans[i] = val - 1;
else {
int x = cur.x + winx[k][val - 5], y = cur.y + winy[k][val - 5];
if (x == 1 && y == 1) ans[i] = 4;
else if (y > 1) ans[i] = 0;
else if (y < 1) ans[i] = 1;
else if (x > 1) ans[i] = 2;
else ans[i] = 3;
}
}
return ans;
}