#include <bits/stdc++.h>
using namespace std;
#define int long long
#define NM 1002
int N,x[NM*NM],g[NM*NM][4],s[NM*NM],v[NM*NM],w[NM*NM],p[NM*NM],t[NM*NM],r[NM*NM],ti[NM*NM],to[NM*NM],ta;
void dfs(int i){
s[i]=1;
w[i]=i;
ti[i]=ta++;
for(int j:g[i]){
if(x[j]!=x[i]){
continue;
}
if(j==p[i]){
continue;
}
if(v[j]){
if(v[j]<v[w[i]]){
w[i]=j;
}
continue;
}
v[j]=v[i]+1;
p[j]=i;
t[j]=t[i];
dfs(j);
s[i]+=s[j];
if(v[w[j]]<v[w[i]]){
w[i]=w[j];
}
}
to[i]=ta++;
}
int des(int i,int j){
return ti[i]<=ti[j]&&to[i]>=to[j];
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N=10;
cin>>N;
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
x[i*NM+j]=rand()%4+1;
cin>>x[i*NM+j];
}
}
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
g[i*NM+j][0]=i*NM+j-1;
g[i*NM+j][1]=i*NM+j+1;
g[i*NM+j][2]=(i-1)*NM+j;
g[i*NM+j][3]=(i+1)*NM+j;
}
}
int o=0;
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
int y=i*NM+j;
if(v[y]){
continue;
}
o++;
v[y]=1;
t[y]=o;
r[o]=y;
dfs(y);
}
}
for(int d=0;d<2;d++){
for(int i=1;i+(d==1)<=N;i++){
for(int j=1;j+(d==0)<=N;j++){
int y1=i*NM+j;
int y2=(i+(d==1))*NM+j+(d==0);
if(t[y1]==t[y2]){
cout<<0<<' ';
continue;
}
int c[2]{1,1};
for(int i=0;i<2;i++){
int b=0;
set<int>bb;
for(int z:g[y2]){
if(z==y1){
continue;
}
if(x[z]!=x[y1]){
continue;
}
if(t[z]==t[y1]){
int cc=s[r[t[z]]]-1;
if(!des(y1,z)&&w[y1]==y1){
cc-=s[y1]-1;
if(b++){
cc=0;
}
}
else{
int k=1;
for(int kk:g[y1]){
if(x[kk]!=x[y1]){
continue;
}
if(des(y1,kk)&&des(kk,z)){
if(k!=-1&&s[k]>s[kk]){
continue;
}
k=kk;
}
}
if(k==-1){
exit(1);
}
if(v[w[k]]>=v[y1]){
if(bb.insert(k).second){
cc=s[k];
}
else{
cc=0;
}
}
}
// if(!des(y1,z)){
// if(!b){
// b=1;
// c[i]+=s[r[t[z]]]-s[y1];
// }
// continue;
// }
// int k=-1;
// for(int kk:g[y1]){
// if(des(y1,kk)&&des(kk,z)){
// if(k!=-1&&s[k]>s[kk]){
// cout.flush();
// system("cls");
// for(int i=1;i<=N;i++){
// for(int j=1;j<=N;j++){
// cout<<x[i*NM+j]<<' ';
// }
// cout<<'\n';
// }
// cout<<(y1/NM)<<' '<<(y1%NM)<<endl;
// cout<<(y2/NM)<<' '<<(y2%NM)<<endl;
// cout<<(z/NM)<<' '<<(z%NM)<<endl;
// cout<<"old "<<(k/NM)<<' '<<(k%NM)<<endl;
// cout<<"new "<<(kk/NM)<<' '<<(kk%NM)<<endl;
// exit(1);
// continue;
// }
// k=kk;
// }
// }
// if(k==-1){
// exit(1);
// }
// if(bb.insert(k).second){
// c[i]+=s[k];
// }
c[i]+=cc;
// if(s[r[t[z]]]-1==cc)c[i]=-110;
}
else{
c[i]+=s[r[t[z]]];
for(int zz:g[y2]){
if(zz<z&&z!=y1&&t[zz]==t[z]){
c[i]-=s[r[t[z]]];
break;
}
}
}
}
swap(y1,y2);
}
// c[1]=1;
cout<<c[0]*c[1]<<' ';
}
cout<<'\n';
}
}
if(0){
memset(x,0,sizeof(x));
memset(g,0,sizeof(g));
memset(s,0,sizeof(s));
memset(v,0,sizeof(v));
memset(w,0,sizeof(w));
memset(p,0,sizeof(p));
memset(t,0,sizeof(t));
memset(r,0,sizeof(r));
memset(ti,0,sizeof(ti));
memset(to,0,sizeof(to));
ta=0;
main();
}
return 0;
}