/*
#include <stdio.h>
char color[11][11];
void dfs(int x, int y)
{
if(x<0||x>9||y<0||y>9)
{
return;
}
color[x][y]='*';
if(color[x-1][y]=='_')
{
dfs(x-1,y);
}
if(color[x+1][y]=='_')
{
dfs(x+1,y);
}
if(color[x][y+1]=='_')
{
dfs(x,y+1);
}
if(color[x][y-1]=='_')
{
dfs(x,y-1);
}
}
int main()
{
int x,y,i,j;
for(i=0; i<=9; i++)
{
for(j=0; j<=9; j++)
{
scanf("%c ",&color[i][j]);
}
}
scanf("%d %d",&x,&y);
if(color[y][x]=='_')
{
dfs(y,x);
}
for(i=0; i<=9; i++)
{
for(j=0; j<=9; j++)
{
printf("%c",color[i][j]);
}
printf("\n");
}
return 0;
}
*/
#include<stdio.h>
int bright[101][101],bright1[101][101],bright2[101][101],cnt1,cnt2,m,n;
void dfs1(int x1,int y1)
{
if(x1<1||x1>m||y1<1||y1>n)
{
return;
}
bright1[x1][y1]=1;
if(bright1[x1-1][y1]==1)
{
bright1[x1-1][y1]==cnt1;
dfs1(x1-1,y1);
}
if(bright1[x1+1][y1]==1)
{
bright1[x1-1][y1]==cnt1;
dfs1(x1+1,y1);
}
if(bright1[x1][y1+1]==1)
{
bright1[x1-1][y1]==cnt1;
dfs1(x1,y1+1);
}
if(bright1[x1][y1-1]==1)
{
bright1[x1-1][y1]==cnt1;
dfs1(x1,y1-1);
}
}
void dfs2(int x2,int y2)
{
if(x2<1||x2>m||y2<1||y2>n)
{
return;
}
bright2[x2][y2]=1;
if(bright2[x2-1][y2]==1)
{
bright2[x2-1][y2]==cnt2;
dfs2(x2-1,y2);
}
if(bright2[x2+1][y2]==1)
{
bright2[x2-1][y2]==cnt2;
dfs2(x2+1,y2);
}
if(bright2[x2][y2+1]==1)
{
bright2[x2-1][y2]==cnt2;
dfs2(x2,y2+1);
}
if(bright2[x2][y2-1]==1)
{
bright2[x2-1][y2]==cnt2;
dfs2(x2,y2-1);
}
}
int main()
{
int m,n,i,j;
bright[101][101]=bright1[101][101];
bright[101][101]=bright2[101][101];
scanf("%d %d",&m,&n);
for(i=1; i<=m; i++)
{
for(j=1; j<=n; j++)
{
scanf("%d",&bright[m][n]);
}
}
for(i=1; i<=m; i++)
{
for(j=1; j<=n; j++)
{
if(bright[i][j]==0)
{
cnt1++;
dfs1(i,j);
}
if(bright[i][j]==1)
{
cnt2++;
dfs2(i,j);
}
}
}
printf("%d %d",cnt1,cnt2);
}