#include <bits/stdc++.h>
using namespace std;
int map[1620][1620];
int bel[1620][1620];
int obe[1620][1620];
int ers[1620][1620];
int ctb[222222];
int s[222222], ans[222222];
int w, h;
int calc(int x, int y) {
  int i, j, ans = 0;
  for (i = -10; i <= 10; i++)
    if (x + i > 0 && x + i <= h)
      for (j = -10; j <= 10; j++)
        if (y + j > 0 && y + j <= w)
          if (bel[x + i][y + j]) ans++;
  return ans;
}
void scan(int x, int y, int p) {
  bel[x][y] = p;
  s[p]++;
  if (((x + 1) > 0 && (x + 1) <= h && (y) > 0 && (y) <= w &&
       map[x + 1][y] == 1 && bel[x + 1][y] == 0))
    scan(x + 1, y, p);
  if (((x - 1) > 0 && (x - 1) <= h && (y) > 0 && (y) <= w &&
       map[x - 1][y] == 1 && bel[x - 1][y] == 0))
    scan(x - 1, y, p);
  if (((x) > 0 && (x) <= h && (y + 1) > 0 && (y + 1) <= w &&
       map[x][y + 1] == 1 && bel[x][y + 1] == 0))
    scan(x, y + 1, p);
  if (((x) > 0 && (x) <= h && (y - 1) > 0 && (y - 1) <= w &&
       map[x][y - 1] == 1 && bel[x][y - 1] == 0))
    scan(x, y - 1, p);
}
vector<int> V[40];
int main() {
  int i, j, i0, j0, p = 0, r = 0;
  scanf("%d %d", &h, &w);
  for (i = 1; i <= h; i++)
    for (j = 1; j <= w; j++) scanf("%d", &map[i][j]);
  for (i = 1; i <= h; i++)
    for (j = 1; j <= w; j++)
      if (bel[i][j] == 0 && map[i][j] == 1) scan(i, j, ++p);
  for (i = 1; i <= h; i++)
    for (j = 1; j <= w; j++) obe[i][j] = bel[i][j], bel[i][j] = 0;
  for (i = 1; i <= p; i++) s[i] = 0;
  r = p;
  for (i = 3; i + 2 <= h; i++)
    for (j = 3; j + 2 <= w; j++) {
      int q = 1;
      for (i0 = -2; i0 <= 2; i0++) {
        for (j0 = -2; j0 <= 2; j0++)
          if (map[i + i0][j + j0] != 1) {
            q = 0;
            break;
          }
        if (q == 0) break;
      }
      if (q == 1) {
        for (i0 = -2; i0 <= 2; i0++)
          for (j0 = -2; j0 <= 2; j0++) ers[i + i0][j + j0] = 1;
      }
    }
  for (i = 1; i <= h; i++)
    for (j = 1; j <= w; j++)
      if (ers[i][j]) map[i][j] = 0;
  p = 0;
  for (i = 1; i <= h; i++)
    for (j = 1; j <= w; j++)
      if (bel[i][j] == 0 && map[i][j] == 1) scan(i, j, ++p);
  for (i = 1; i <= h; i++)
    for (j = 1; j <= w; j++)
      if (!ctb[bel[i][j]])
        if (s[bel[i][j]] >= 20) {
          ans[obe[i][j]]++;
          ctb[bel[i][j]] = 1;
        }
  printf("%d\n", r);
  sort(ans + 1, ans + r + 1);
  for (i = 1; i <= r; i++) printf("%d ", ans[i]);
  return 0;
}
