#include <bits/stdc++.h>
using namespace std;
int const MAXN = 250;
int n,m;
int ans = 0;
int a[MAXN + 10][MAXN + 10];
bool b[MAXN + 10][MAXN + 10];
int fx[5] = {0,1,0,-1,0};
int fy[5] = {0,0,1,0,-1};
int sum = 0;
int t[70000];
void dfs(int x,int y) {
sum++;
b[x][y] = true;
for(int i = 1; i <= 4; i++) {
int tx = x + fx[i];
int ty = y + fy[i];
if(b[tx][ty] == false && a[tx][ty] == 1 && tx >= 1 && tx <= n && ty >= 1 && ty <= m) {
dfs(tx,ty);
}
}
}
int main() {
while(1) {
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(!b[i][j] && a[i][j] == 1) {
dfs(i,j);
ans++;
t[sum]++;
sum = 0;
}
}
}
cout << ans << endl;
for(int i = 1; i <= 65000; i++) {
if(t[i]) {
cout << i << " " << t[i] << endl;
}
}
}
}