#include "mars.h"
#include<bits/stdc++.h>
#define f0r(i,n) for(int i = 0; i < n; i++)
#define FOR(i,k,n) for(int i = k; i < n; i++)
#define vi vector<int>
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define dout(x) cout<<x<<' '<<#x<<endl
#define dout2(x,y) cout<<x<<' '<<#x<<' '<<y<<' '<<#y<<endl
#define vout(v) cout<<#v<<": "; for(auto u : v)cout<<u<<' '; cout<<endl
using namespace std;
vi dx = {0,0,1,-1}, dy = {1,-1,0,0};
std::string process(std::vector <std::vector<std::string>> a, int x, int y, int h, int m)
{
int n = 2 * m + 1;
if(h == m-1){
vector<vector<vi>>c(n, vector<vi>(n)), b(n, vector<vi>(n));
f0r(i,n)f0r(j,n)c[i][j].pb(i*n+j);
int pt = 0;
for(int i = n-2; i >= 3; i-=2){
if(pt <= 8){
f0r(j,i)f0r(k,i)for(auto u : c[j+2][k+2])b[j][k].pb(u);
f0r(j,2)f0r(k,2)for(auto u : c[j][k])b[j][k].pb(u);
f0r(j,i)f0r(k,2){
for(auto u : c[j+2][k])b[j][k].pb(u);
for(auto u : c[k][j+2])b[k][j].pb(u);
}
}
else if(i >= 5){
f0r(j,2)f0r(k,2)for(auto u : c[j][k])b[j][k].pb(u);
FOR(j,2,i)f0r(k,2){
for(auto u : c[j+2][k])b[j][k].pb(u); for(auto u : c[k][j+2])b[k][j].pb(u);
}
FOR(j,2,3)f0r(k,2){
for(auto u : c[k][j])b[k][j].pb(u); for(auto u : c[j][k])b[j][k].pb(u);
}
FOR(j,2,i+2)FOR(k,2,i+2){
if(j>=i&&k>=i){
for(auto u : c[j][k])b[j-2][k-2].pb(u);
}
else if(j >= i){
for(auto u : c[j][k])b[j-2][k].pb(u);
}
else if(k >= i){
for(auto u : c[j][k])b[j][k-2].pb(u);
}
else{
for(auto u : c[j][k])b[j][k].pb(u);
}
}
}
else{
f0r(j,i)f0r(k,i)for(auto u : c[j][k])b[j][k].pb(u);
FOR(j,2,5)FOR(k,2,5)if(j!=2||k!=2)for(auto u : c[j][k])b[2][2].pb(u);
f0r(j,2){
FOR(dd,3,5){
for(auto u : c[j][dd])b[j][2].pb(u);
for(auto u : c[dd][j])b[2][j].pb(u);
}
}
}
c = b; f0r(j,n)f0r(k,n)b[j][k].clear(); pt++;
}
// for(int i = n-2; i >= 3; i-=2){
// f0r(j,i)f0r(k,i){
// for(auto u : c[j+2][k+2])b[j][k].pb(u);
// }
// f0r(j,i){
// for(auto u : c[0][j])b[0][j].pb(u); for(auto u : c[1][j])b[1][j].pb(u);
// }
// FOR(j,2,i){
// for(auto u : c[j][0])b[j][0].pb(u); for(auto u : c[j][1])b[j][1].pb(u);
// }
// FOR(j,i-2,i)f0r(k,2){
// for(auto u : c[j+2][k])b[j][k].pb(u); for(auto u : c[k][j+2])b[k][j].pb(u);
// }
// c = b; f0r(j,n)f0r(k,n)b[j][k].clear();
// }
// f0r(i,n)f0r(j,n){
// vout(c[i][j]);
// }
vi ans(n*n); f0r(i,3)f0r(j,3){
f0r(k,c[i][j].size())ans[c[i][j][k]] = a[i][j][k] - '0';
}
vector<vi> grid(n, vi(n)); int ptr = 0; f0r(i,n)f0r(j,n)grid[i][j] = ans[ptr], ptr++;
// f0r(i,n){
// f0r(j,n)cout<<grid[i][j]<<' '; cout<<'\n';
// }
vector<vector<bool>>vis(n, vector<bool>(n)); int cc = 0; f0r(i,n)f0r(j,n)if(!vis[i][j] && grid[i][j] == 1){
cc++; vis[i][j] = 1; queue<pii>q; q.push(mp(i,j)); while(!q.empty()){
auto [c, d] = q.front(); q.pop(); f0r(t,4){
int c_ = c + dx[t], d_ = d + dy[t]; if(c_ >= 0 && c_ < n && d_ >= 0 && d_ < n && !vis[c_][d_] && grid[c_][d_] == 1){
vis[c_][d_] = 1, q.push(mp(c_,d_));
}
}
}
}
string as(100, '0'); f0r(i,20)if((cc>>i)&1)as[i] = '1'; else as[i] = '0'; return as;
}
vector<vi>v(n,vi(n)),w(n,vi(n));
f0r(i,n)f0r(j,n)v[i][j]=1; int phase = 0;
string nums;
for(int i = n-2; i >= 3; i-=2){
if(v[0][0] < 100){
f0r(j,i)f0r(k,i){
w[j][k] = v[j+2][k+2]; if(x==j&&y==k&&phase==h){
f0r(l, v[j+2][k+2])nums += a[2][2][l];
}
}
f0r(j,2)f0r(k,2){
w[j][k] += v[j][k]; if(x==j&&y==k&&phase==h)f0r(l,v[j][k])nums += a[0][0][l];
}
f0r(j,i)f0r(k,2){
w[j][k] += v[j+2][k]; w[k][j] += v[k][j+2];
if(x==j&&y==k&&phase==h)f0r(l,v[j+2][k])nums += a[2][0][l];
if(x==k&&y==j&&phase==h)f0r(l,v[k][j+2])nums += a[0][2][l];
}
}
else if(i >= 5){
f0r(j,2)f0r(k,2){
w[j][k]=v[j][k]; if(x==j&&y==k&&phase==h)f0r(l,v[j][k])nums += a[0][0][l];
}
FOR(j,2,i)f0r(k,2){
w[j][k] += v[j+2][k], w[k][j] += v[k][j+2];
if(x==j&&y==k&&phase==h)f0r(l,v[j+2][k])nums += a[2][0][l];
if(x==k&&y==j&&phase==h)f0r(l,v[k][j+2])nums += a[0][2][l];
}
FOR(j,2,3)f0r(k,2){
w[j][k] += v[j][k], w[k][j] += v[k][j];
if(x==j&&y==k&&phase==h)f0r(l,v[j][k])nums += a[0][0][l];
if(x==k&&y==j&&phase==h)f0r(l,v[k][j])nums += a[0][0][l];
}
FOR(j,2,i+2)FOR(k,2,i+2){
if(j>=i&&k>=i){
w[j-2][k-2] += v[j][k]; if(x==j-2&&y==k-2&&phase==h)f0r(l,v[j][k])nums += a[2][2][l];
}
else if(j >= i){
w[j-2][k] += v[j][k]; if(x==j-2&&y==k&&phase==h)f0r(l,v[j][k])nums += a[2][0][l];
}
else if(k >= i){
w[j][k-2] += v[j][k]; if(x==j&&y==k-2&&phase==h)f0r(l,v[j][k])nums += a[0][2][l];
}
else{
w[j][k] += v[j][k]; if(x==j&&y==k&&phase==h)f0r(l,v[j][k])nums += a[0][0][l];
}
}
}
else{
f0r(j,i)f0r(k,i){
w[j][k]=v[j][k]; if(x==j&&y==k&&phase==h)f0r(l,v[j][k])nums += a[0][0][l];
}
FOR(j,2,5)FOR(k,2,5)if(j!=2||k!=2){
w[2][2] += v[j][k]; if(x==2&&y==2&&phase==h)f0r(l,v[j][k])nums += a[j-2][k-2][l];
}
f0r(j,2){
w[j][2] += v[j][3] + v[j][4], w[2][j] += v[3][j] + v[4][j];
if(x==j&&y==2&&phase==h){
FOR(dd,3,5)f0r(l,v[j][dd])nums += a[0][dd-2][l];
}
if(x==2&&y==j&&phase==h){
FOR(dd,3,5)f0r(l,v[dd][j])nums += a[dd-2][0][l];
}
}
}
v = w; f0r(j,n)f0r(k,n)w[j][k]=0;
// f0r(k,i){f0r(j,i)cout<<v[k][j]<<' '; cout<<'\n';} cout<<'\n';
phase++;
}
// for(int i = n-2; i >= 3; i-=2){
// f0r(j,i)f0r(k,i){
// w[j][k] = v[j+2][k+2];
// if(x==j&&y==k&&phase==h){
// f0r(l, v[j+2][k+2])nums += a[2][2][l];
// }
// }
// f0r(j,i){
// w[0][j] += v[0][j]; if(x==0&&y==j&&phase==h)f0r(l, v[0][j])nums += a[0][0][l];
// w[1][j] += v[1][j]; if(x==1&&y==j&&phase==h)f0r(l, v[1][j])nums += a[0][0][l];
// }
// FOR(j,2,i){
// w[j][0] += v[j][0]; if(x==j&&y==0&&phase==h)f0r(l, v[j][0])nums += a[0][0][l];
// w[j][1] += v[j][1]; if(x==j&&y==1&&phase==h)f0r(l, v[j][1])nums += a[0][0][l];
//
// }
// FOR(j,i-2,i)f0r(k,2){
// w[j][k] += v[j+2][k]; if(x==j&&y==k&&phase==h)f0r(l, v[j+2][k])nums += a[2][0][l];
// w[k][j] += v[k][j+2]; if(x==k&&y==j&&phase==h)f0r(l, v[k][j+2])nums += a[0][2][l];
// }
// v = w; f0r(j,n)f0r(k,n)w[j][k]=0;
// // f0r(k,i){f0r(j,i)cout<<v[k][j]<<' '; cout<<'\n';} cout<<'\n';
// phase++;
// }
while(nums.size() < 100)nums += '0';
return nums;
}