#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 c = __lg(n);
int x = 3 * c + 2;
vector<vector<int>> s(x+1, vector<int>(n+1));
for (int i=0; i<=x; i++) {
int read = i ? i : 3 * c + 3;
int A = read % 3;
if (A) {
int bit = read / 3;
A--; // 0 or 1
s[i][0] = 1; // check B
for (int j=1; j<=n; j++) {
if (((j >> bit) & 1) == A) {
s[i][j] = bit * 3;
}else{
s[i][j] = A ? -2 : -1;
}
}
}else{
int bit = read / 3 - 1;
s[i][0] = 0; // check A
for (int j=1; j<=n; j++) {
s[i][j] = bit * 3 + ((j >> bit) & 1) + 1;
}
}
}
return s;
}