#include "prison.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;
std::vector<std::vector<int>> devise_strategy(int N) {
int n = N;
int b = 3;
int c = 7; // b ^ (c+1) must be greater than n
// vector<int> base = {2, 2, 2, 2, 2, 2, 2, 2, 2, 5};
int x = b * (c + 1) - 1;
vector<vector<int>> s(x+1, vector<int>(n+1));
for (int i=0; i<=x; i++) {
int read = i > 0 ? i : b * (c + 1);
int bit = read / b;
int O = read % b;
if (bit & 1) {
int A = O;
s[i][0] = 1; // check B
for (int j=1; j<=n; j++) {
int B = j; for (int k=0; k<bit; k++) B /= b; B %= b;
int P = j; for (int k=1; k<bit; k++) P /= b; P %= b;
if (A == B) {
int write = (bit - 1) * b + P;
if (write == 0) write = -2;
s[i][j] = write;
}else{
s[i][j] = A < B ? -1 : -2;
}
}
}else{
int B = O;
s[i][0] = 0; // check A
for (int j=1; j<=n; j++) {
int A = j; for (int k=0; k<bit; k++) A /= b; A %= b;
int P = j; for (int k=1; k<bit; k++) P /= b; P %= b;
if (A == B) {
int write = (bit - 1) * b + P;
if (write == 0) write = -1;
s[i][j] = write;
}else{
s[i][j] = A < B ? -1 : -2;
}
}
}
}
return s;
}