#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back
int dy[7]={0, 0, 0, 1, 1, 1, 2}, dx[7]={0, 1, 2, 0, 1, 2, 0};
void Anna(int n, int k, vector<int> r, vector<int> c){
vector<vector<int> > res(n, vector<int>(n, 0));
for (int i=2; i<n; i+=3)for (int j=2; j<n; j+=3)res[i][j]=14;
set<int> s;
for (int i=1; i<=9; ++i)s.insert(i);
for (int p=0; p<k; ++p)for (int i=0; i<3; ++i)for (int j=0; j<3; ++j)if ((r[p]-1+i)%3==dy[p]&&(c[p]-1+j)%3==dx[p])res[r[p]-1+i][c[p]-1+j]=i*3+j+1, s.erase(i*3+j+1);
for (int p=0; p<k; ++p)for (int i=dy[p]; i<n; i+=3)for (int j=dx[p]; j<n; j+=3)if (!res[i][j]){
if (j+1<c[p])res[i][j]=10;
else if (j>c[p]+1)res[i][j]=11;
else if (i+1<r[p])res[i][j]=12;
else res[i][j]=13;
}
for (int i=0; i<n; ++i)for (int j=0; j<n; ++j)if (res[i][j]>=*s.begin()+1)--res[i][j];
for (int i=0; i<n; ++i)for (int j=0; j<n; ++j)SetFlag(i, j, (res[i][j]?res[i][j]:*s.begin()));
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back
pii query(int y, int x, int a){
if (a==1)return mp(y+1, x+1);
else if (a==2)return mp(y+1, x);
else if (a==3)return mp(y+1, x-1);
else if (a==4)return mp(y, x+1);
else if (a==5)return mp(y, x);
else if (a==6)return mp(y, x-1);
else if (a==7)return mp(y-1, x+1);
else if (a==8)return mp(y-1, x);
else return mp(y-1, x-1);
}
vector<int> Bruno(int k, vector<int> val){
vector<int> ans(k);
vector<pii> rel(9), rev(9);
vector<vector<int> > grid(3, vector<int>(3)), graph(5, vector<int>(5, 0));
int id=-1;
for (int i=0; i<9; ++i){
grid[i/3][i%3]=val[i];
if (val[i]==14)id=i;
}
for (int i=0; i<9; ++i)rel[i]=mp(i/3-id/3, i%3-id%3);
for (int i=0; i<9; ++i)graph[2+rel[i].fi][2+rel[i].se]=val[i];
vector<int> vect;
for (int i=0; i<3; ++i)for (int j=0; j<3; ++j)vect.pb(grid[(id/3+1+i)%3][(id%3+1+j)%3]);
for (int i=0; i<5; ++i)for (int j=0; j<5; ++j)if (graph[i][j])rev[i%3*3+j%3]=mp(i, j);
for (int i=0; i<9; ++i)if (vect[i]>=grid[2][1])++vect[i];
int cy=3-id/3, cx=3-id%3;
for (int i=0; i<k; ++i){
if (vect[i]==10)ans[i]=0;
else if (vect[i]==11)ans[i]=1;
else if (vect[i]==12)ans[i]=2;
else if (vect[i]==13)ans[i]=3;
else{
pii c=query(rev[i].fi, rev[i].se, vect[i]);
if (cx<c.se)ans[i]=0;
else if (cx>c.se)ans[i]=1;
else if (cy<c.fi)ans[i]=2;
else if (cy>c.fi)ans[i]=3;
else ans[i]=4;
}
}
return ans;
}