{
bool f1=1,f2=1;
//f1山峰
//f2山谷
for(int i=0;i<8;i++){
int tx=x+fx[i];
int ty=y+fy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=n){
if(a[tx][ty]>a[x][y]){
f1=0;
}if(a[tx][ty]<a[x][y]){
f2=0;
}
}
}
if(f1==0){
return 1;
}else if(f2==0){
return -1;
}
return 0;
}
void dfs(int x,int y,int now){
cout<<x<<" "<<y<<" "<<now<<endl;
for(int i=0;i<8;i++){
int tx=x+fx[i];
int ty=y+fy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&now==b[tx][ty]){
b[tx][ty]=-1;
dfs(tx,ty,now);
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
b[i][j]=a[i][j];
}
}for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(check(i,j)==1&&b[i][j]!=-1){
//cout<<"f"<<" "<<a[i][j]<<endl;
dfs(i,j,a[i][j]);
ans++;
b[i][j]=-1;
}else if(check(i,j)==-1&&b[i][j]!=-1){
//cout<<"g"<<" "<<a[i][j]<<endl;
dfs(i,j,a[i][j]);
res++;
b[i][j]=-1;
}
}
}
cout<<res<<" "<<ans<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}