#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,-1,1,-1,0,1};
int a[N][N],n,ff,gg,s;
bool f[N][N],g[N][N],p,q;
void sf1(int x,int y){
if(f[x][y]==true) return;
p=true;
f[x][y]=true;
for(int i=0;i<=7;i++)
if(x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=n)
if(a[x+dx[i]][y+dy[i]]>=a[x][y])
sf1(x+dx[i],y+dy[i]);
}
void sf2(int x,int y){
if(f[x][y]==true) return;
p=true;
f[x][y]=true;
for(int i=0;i<=7;i++)
if(x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=n)
if(a[x+dx[i]][y+dy[i]]<=a[x][y])
sf2(x+dx[i],y+dy[i]);
}
void sg1(int x,int y){
if(g[x][y]==true) return;
p=true;
g[x][y]=true;
for(int i=0;i<=7;i++)
if(x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=n)
if(a[x+dx[i]][y+dy[i]]<=a[x][y])
sg1(x+dx[i],y+dy[i]);
}
void sg2(int x,int y){
if(g[x][y]==true) return;
p=true;
g[x][y]=true;
for(int i=0;i<=7;i++)
if(x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=n)
if(a[x+dx[i]][y+dy[i]]>=a[x][y])
sg2(x+dx[i],y+dy[i]);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
cin>>a[i][j];
if(i==1&&j==1){
s=a[i][j];
continue;
}
if(a[i][j]!=s){
s=-1;
}
}
if(s!=-1){
cout<<1<<" "<<1;
return 0;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
q=true;
for(int k=0;k<=7;k++){
if(i+dx[k]>=1&&i+dx[k]<=n&&j+dy[k]>=1&&j+dy[k]<=n){
if(a[i+dx[k]][j+dy[k]]>a[i][j]){
q=false;
break;
}
}
}
if(q==true){
p=false;
sf1(i,j);sf2(i,j);
if(p==true) ff++;
}
q=true;
for(int k=0;k<=7;k++){
if(i+dx[k]>=1&&i+dx[k]<=n&&j+dy[k]>=1&&j+dy[k]<=n){
if(a[i+dx[k]][j+dy[k]]<a[i][j]){
q=false;
break;
}
}
}
if(q==true){
p=false;
sg1(i,j);sg2(i,j);
if(p==true) gg++;
}
}
}
cout<<ff<<" "<<gg;
return 0;
}
#3 #6为啥wa了!?虽然写的很石但是不懂错哪qwq