#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int dx[5]={0,0,0,1,-1};
int dy[5]={0,1,-1,0,0};
int tans,cnt;
int vis[1005][1005];
int a[1005][1005];
int t[62505];
void dfs(int x,int y)
{
if(x<1||x>n||y<1||y>m) return;
if(vis[x][y]) return;
if(a[x][y]==0) return;
++tans;
vis[x][y]=cnt;
for(int i=1;i<=4;i++)
dfs(x+dx[i],y+dy[i]);
}
int main()
{
cin>>n>>m;
if(n==0&&m==0) return 0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(vis[i][j]||a[i][j]==0) continue;
cnt++;
dfs(i,j);
t[tans]++;
tans=0;
}
cout<<cnt<<endl;
for(int i=1;i<=62500;i++)
if(t[i]!=0) printf("%d %d\n",i,t[i]);
return 0;
}