#include<bits/stdc++.h>
using namespace std;
int high=0,low=0,N;
int dx[]={1,-1,0,0};
int dy[]={0,0,-1,1};
int v[1001][1001],a[1001][1001];
bool check(int x,int y)
{
if(x>N || y>N || x<1 || y<1) return 1;
else return 0;
}
void bfs(int x,int y)
{
bool b1=0,b2=0;
int cnt=0;
queue<pair<int, int> >Q;
Q.push(make_pair(x,y));
cnt++;
v[x][y]=1;
while(Q.size())
{
pair<int, int>tot=Q.front();
Q.pop();
int x1=tot.first,y1=tot.second;
for(int i=0;i<4;i++)
{
int px=x1+dx[i];
int py=y1+dy[i];
if(!check(px,py)|| (v[px][py] && a[x1][y1]==a[px][py]))continue;
else {
if(a[x1][y1]==a[px][py])
{
Q.push(make_pair(px,py));
v[px][py]=1;
cnt++;
}
else if(a[x1][y1]>=a[px][py]) b1=1;
else b2=1;
}
}
}
if(b1&&b2) return;
else if(b1) high++;
else if(b2) low++;
if(cnt==N*N) high++,low++;
return;
}
int main()
{
cin>>N;
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
{
cin>>a[i][j];
}
memset(v,false,sizeof(v));
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
{
if(!v[i][j]) bfs(i,j);
}
cout<<high<<' '<<low<<endl;
return 0;
}