#include "Anna.h"
#include <bits/stdc++.h>
namespace {
} // namespace
void Anna(int N, int K, std::vector<int> R, std::vector<int> C) {
bool det = false;
std::vector<std::vector<int>> res(N, std::vector<int>(N, 0));
for (int R0 = 0; R0 < 3; ++R0) {
for (int C0 = 0; C0 < 3; ++C0) {
bool good = true;
std::vector<int> used(9);
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
int id = (i + R0) % 3 * 3 + (j + C0) % 3;
if (1 <= id && id <= 7) {
int x = R[id - 1] - i;
int y = C[id - 1] - j;
if (-1 <= x && x <= 1 && -1 <= y && y <= 1) {
used[3 * (x + 1) + (y + 1)] = true;
}
}
}
}
if (!used[8]) {
int emp = 0;
while (used[emp]) {
emp += 1;
}
// std::cerr << emp << '\n';
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
int id = (i + R0) % 3 * 3 + (j + C0) % 3;
if (id == 0) {
res[i][j] = 1;
} else if (id == 8) {
res[i][j] = 2 + emp;
} else {
int x = R[id - 1] - i;
int y = C[id - 1] - j;
if (-1 <= x && x <= 1 && -1 <= y && y <= 1) {
int u = (x + 1) * 3 + (y + 1);
assert(u != emp);
if (u > emp) {
u -= 1;
}
res[i][j] = 2 + u;
} else {
if (x < -1) {
res[i][j] = 9;
} else if (x > 1) {
res[i][j] = 10;
} else if (y < -1) {
res[i][j] = 11;
} else {
res[i][j] = 12;
}
}
}
}
}
det = true;
break;
}
if (det) {
break;
}
}
if (det) {
break;
}
}
assert(det);
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
SetFlag(i, j, res[i][j]);
// std::cerr << res[i][j] << " \n"[j == N - 1];
}
}
}
#include "Bruno.h"
#include <bits/stdc++.h>
namespace {
} // namespace
std::vector<int> Bruno(int K, std::vector<int> value) {
std::vector<int> res(K);
std::vector<std::vector<int>> g(3, std::vector<int>(3));
for (int i = 0; i < 9; ++i) {
g[i / 3][i % 3] = value[i];
}
// for (int i = 0; i < 3; ++i) {
// for (int j = 0; j < 3; ++j) {
// std::cerr << g[i][j] << " \n"[j == 2];
// }
// }
int p = int(std::find(value.begin(), value.end(), 1) - value.begin());
int R0 = (3 - p / 3) % 3;
int C0 = (3 - p % 3) % 3;
int emp = -1;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
int id = (i + R0) % 3 * 3 + (j + C0) % 3;
if (id == 8) {
emp = g[i][j] - 2;
}
}
}
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
int id = (i + R0) % 3 * 3 + (j + C0) % 3;
if (id == 0) {
assert(g[i][j] == 1);
} else if (id != 8) {
id -= 1;
if (g[i][j] >= 9) {
if (g[i][j] == 9) {
res[id] = 3;
} else if (g[i][j] == 10) {
res[id] = 2;
} else if (g[i][j] == 11) {
res[id] = 1;
} else {
res[id] = 0;
}
} else {
int u = g[i][j] - 2;
if (u >= emp) {
u += 1;
}
int dx = i - 1;
int dy = j - 1;
dx += u / 3 - 1;
dy += u % 3 - 1;
if (dx <= -1) {
res[id] = 3;
} else if (dx >= 1) {
res[id] = 2;
} else if (dy <= -1) {
res[id] = 1;
} else if (dy >= 1) {
res[id] = 0;
} else {
res[id] = 4;
}
}
}
}
}
return res;
}