#include "mars.h"
#include <bits/stdc++.h>
using namespace std;
int N;
struct DSU{
int par[100001], sz[100001], comps;
void init(int n){
comps = 0;
for(int i = 0; i <= n; i++){
par[i] = i;
sz[i] = 1;
}
}
int find(int a){
if(a == par[a]) return par[a];
return par[a] = find(par[a]);
}
bool merge(int a, int b){
a = find(a), b = find(b);
if(a == b) return 0;
if(sz[a] > sz[b]) swap(a, b);
par[a] = b;
sz[b] += sz[a];
comps++;
return 1;
}
} dsu;
set<pair<int,int> > st;
std::string process(std::vector <std::vector<std::string> > a, int i, int j, int k, int n){
if(i == 0 && j == 0 && k == 0){
N = 2*n + 1;
dsu.init(N * N + 20);
st.clear();
}
if(k == 0){
for(int it = 0; it < 3; it++){
for(int jt = 0; jt < 3; jt++){
if(a[it][jt][0] == '1') st.insert(make_pair(i + it, j + jt));
if(it + 1 < 3 && a[it][jt][0] == '1' && a[it + 1][jt][0] == '1'){
dsu.merge((i + it) * N + (j + jt), (i + it + 1) * N + (j + jt));
}
if(jt + 1 < 3 && a[it][jt][0] == '1' && a[it][jt + 1][0] == '1'){
dsu.merge((i + it) * N + (j + jt), (i + it) * N + (j + jt + 1));
}
}
}
}
if(k == n - 1){
int val = st.size() - dsu.comps;
string res(100, '0');
for(int i = 0; i < 30; i++){
if(val & (1 << i)) res[i] = '1';
}
return res;
}
return string(100, '0');
}