#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
#include <iomanip>
#include <limits.h>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <deque>
#include <map>
#include <chrono>
#include <random>
#include <bitset>
#include <tuple>
#include <cassert>
#include "mars.h"
#define SZ(x) (LL)(x.size())
#define FR(i,a,b) for(LL i=(a);i<(b);++i)
#define FOR(i,n) FR(i,0,n)
#define FAST ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define A first
#define B second
#define mp(a,b) make_pair(a,b)
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
typedef unsigned __int128 U128;
typedef __int128 I128;
typedef std::pair<int,int> PII;
typedef std::pair<LL,LL> PLL;
using namespace std;
int grid[8][8];
bool vis[8][8];
PLL d[4]={mp(0,1), mp(0,-1), mp(1,0), mp(-1,0)};
void bfs(int i, int j, int n){
queue<PII> q;
vis[i][j]=true;
q.push(mp(i,j));
while (!q.empty()){
int ci=q.front().A, cj=q.front().B;
q.pop();
FOR(xx,4){
int ni=ci+d[xx].A, nj=cj+d[xx].B;
if (min(ni,nj)>=0 && max(ni,nj)<2*n+1 && grid[ni][nj]==1 && !vis[ni][nj]){
vis[ni][nj]=true;
q.push(mp(ni,nj));
}
}
}
}
std::string process(std::vector <std::vector<std::string> > a, int i, int j, int k, int n){
if (n==1){
string s=string(100,'0');
FOR(i1,3) FOR(j1,3){
if (a[i1][j1][0]=='1'){
int id=(i1+i)*10+(j1+j);
s[id]='1';
}
}
FOR(id,100){
if (s[id]=='1'){
int i1=id/10, j1=id%10;
grid[i1][j1]=1;
}
}
int ans=0;
FOR(i1,2*n+1) FOR(j1,2*n+1){
if (!vis[i1][j1] && grid[i1][j1]==1){
ans++;
bfs(i1,j1,n);
}
}
string res=string(100,'0');
FOR(ii,8){
if (ans&(1<<ii)) res[ii]='1';
}
//cout<<"STRING: "<<res<<"\n";
return res;
}
if (k<n-1){
//overwrite h[i][j]
string s=string(100,'0');
FOR(i1,3) FOR(j1,3){
if (a[i1][j1][0]=='1'){
int id=(i1+i)*10+(j1+j);
s[id]='1';
}
}
return s;
}
if (k==n-1){
string s=a[0][0];
FOR(i1,3) FOR(j1,3){
FOR(id,100) if (a[i1][j1][id]=='1') s[id]='1';
}
FOR(id,100){
if (s[id]=='1'){
int i1=id/10, j1=id%10;
grid[i1][j1]=1;
}
}
int ans=0;
FOR(i1,2*n+1) FOR(j1,2*n+1){
if (!vis[i1][j1] && grid[i1][j1]==1){
ans++;
bfs(i1,j1,n);
}
}
string res=string(100,'0');
FOR(ii,8){
if (ans&(1<<ii)) res[ii]='1';
}
//cout<<"STRING: "<<res<<"\n";
return res;
}
return "poo";
}