#include<bits/stdc++.h>
using namespace std;
struct anh
{
int a[100][100],n,m;
multiset<int> Res;
void nhap()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) cin>>a[i][j];
for(int i=0;i<=n+1;i++) a[i][0]=a[i][m+1]=2;
for(int j=0;j<=m+1;j++) a[0][j]=a[n+1][j]=2;
}
void dfs(int x,int y)
{
stack<pair<int,int>> S;
int d=1;
S.push({x,y}); a[x][y]=3;
while(S.size())
{
pair<int,int> u=S.top(); S.pop();
for(int i=-1;i<=1;i++)
for(int j=-1;j<=1;j++)
if(a[u.first+i][u.second+j]==0)
{
a[u.first+i][u.second+j]=3;
S.push({u.first+i,u.second+j});
d++;
}
}
Res.insert(d);
}
void bfs(int x,int y)
{
queue<pair<int,int>> S;
int d=1;
S.push({x,y}); a[x][y]=3;
while(S.size())
{
pair<int,int> u=S.front(); S.pop();
for(int i=-1;i<=1;i++)
for(int j=-1;j<=1;j++)
if(a[u.first+i][u.second+j]==0)
{
a[u.first+i][u.second+j]=3;
S.push({u.first+i,u.second+j});
d++;
}
}
Res.insert(d);
}
void sol()
{
nhap();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) if(a[i][j]==0) bfs(i,j);
cout<<Res.size()<<"\n";
for(auto r:Res) cout<<r<<" ";
}
};
int main()
{
anh A; A.sol();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBhbmgKewoJaW50IGFbMTAwXVsxMDBdLG4sbTsKCW11bHRpc2V0PGludD4gUmVzOwoJdm9pZCBuaGFwKCkKCXsKCQljaW4+Pm4+Pm07CgkJZm9yKGludCBpPTE7aTw9bjtpKyspCgkJZm9yKGludCBqPTE7ajw9bTtqKyspIGNpbj4+YVtpXVtqXTsKCQlmb3IoaW50IGk9MDtpPD1uKzE7aSsrKSBhW2ldWzBdPWFbaV1bbSsxXT0yOwoJCWZvcihpbnQgaj0wO2o8PW0rMTtqKyspIGFbMF1bal09YVtuKzFdW2pdPTI7Cgl9Cgl2b2lkIGRmcyhpbnQgeCxpbnQgeSkKCXsKCQlzdGFjazxwYWlyPGludCxpbnQ+PiBTOwoJCWludCBkPTE7CgkJUy5wdXNoKHt4LHl9KTsgYVt4XVt5XT0zOwoJCXdoaWxlKFMuc2l6ZSgpKQoJCXsKCQkJcGFpcjxpbnQsaW50PiB1PVMudG9wKCk7IFMucG9wKCk7CgkJCWZvcihpbnQgaT0tMTtpPD0xO2krKykKCQkJCWZvcihpbnQgaj0tMTtqPD0xO2orKykKCQkJCWlmKGFbdS5maXJzdCtpXVt1LnNlY29uZCtqXT09MCkKCQkJCXsKCQkJCQlhW3UuZmlyc3QraV1bdS5zZWNvbmQral09MzsKCQkJCQlTLnB1c2goe3UuZmlyc3QraSx1LnNlY29uZCtqfSk7CgkJCQkJZCsrOwoJCQkJfQoJCX0KCQlSZXMuaW5zZXJ0KGQpOwoJfQoJdm9pZCBiZnMoaW50IHgsaW50IHkpCgl7CgkJcXVldWU8cGFpcjxpbnQsaW50Pj4gUzsKCQlpbnQgZD0xOwoJCVMucHVzaCh7eCx5fSk7IGFbeF1beV09MzsKCQl3aGlsZShTLnNpemUoKSkKCQl7CgkJCXBhaXI8aW50LGludD4gdT1TLmZyb250KCk7IFMucG9wKCk7CgkJCWZvcihpbnQgaT0tMTtpPD0xO2krKykKCQkJCWZvcihpbnQgaj0tMTtqPD0xO2orKykKCQkJCWlmKGFbdS5maXJzdCtpXVt1LnNlY29uZCtqXT09MCkKCQkJCXsKCQkJCQlhW3UuZmlyc3QraV1bdS5zZWNvbmQral09MzsKCQkJCQlTLnB1c2goe3UuZmlyc3QraSx1LnNlY29uZCtqfSk7CgkJCQkJZCsrOwoJCQkJfQoJCX0KCQlSZXMuaW5zZXJ0KGQpOwoJfQoJdm9pZCBzb2woKQoJewoJCW5oYXAoKTsKCQlmb3IoaW50IGk9MTtpPD1uO2krKykKCQlmb3IoaW50IGo9MTtqPD1tO2orKykgaWYoYVtpXVtqXT09MCkgYmZzKGksaik7CgkJY291dDw8UmVzLnNpemUoKTw8IlxuIjsKCQlmb3IoYXV0byByOlJlcykgY291dDw8cjw8IiAiOwoJfQp9OwoKaW50IG1haW4oKQp7CglhbmggQTsgQS5zb2woKTsKfQoK