/*
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
return 0;
}
*/
/*
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%c%d",(n+8)%12+65,(n+6)%10);
}
*/
/*
#include<stdio.h>
int map[101][101]={};
int visited[101]={};
int n;
void dfs(int node)
{
visited[node]=1;
for(int i=1;i<=n;i++){
if(map[node][i]==1 && visited[i]==0){
dfs(i);
}
}
}
int main()
{
int e, i, j, x, y;
int cnt=0;
scanf("%d %d",&n,&e);
for(i=0;i<e;i++){
scanf("%d %d",&x,&y);
map[x][y]=map[y][x]=1;
}
dfs(1);
for(i=2;i<=n;i++){
cnt+=visited[i];
}
printf("%d",cnt);
}
*/
#include<stdio.h>
int map[28][28]={};
int arr[100]={};
int n, cnt=0,t=0;
void dfs(int x, int y){
if(x<1||x>n||y<1||y>n||map[x][y]!=1) return;
map[x][y]=-1;
t++;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
int main()
{
int i,j,tmp,min;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%1d",&map[i][j]);
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(map[i][j]==1){
cnt++;
dfs(i,j);
arr[cnt]=t;
t=0;
}
}
}
for(i=1;i<=cnt;i++)
{
min=i;
for(j=i+1;j<=cnt;j++)
{
if(arr[min]>arr[j])
{
min=j;
}
}
tmp=arr[i];
arr[i]=arr[min];
arr[min]=tmp;
}
printf("%d\n",cnt);
for(i=1;i<=cnt;i++)
{
printf("%d\n",arr[i]);
}
}
/*
#include<stdio.h>
char map[102][102]={};
int w,h,cnt=0;
void dfs(int a, int b)
{
if(a<1||a>h||b<1||b>w||map[a][b]!='L') return;
map[a][b]='.';
dfs(a+1,b);
dfs(a-1,b);
dfs(a,b+1);
dfs(a,b-1);
dfs(a-1,b-1);
dfs(a-1,b+1);
dfs(a+1,b-1);
dfs(a+1,b+1);
}
int main()
{
int i,j;
scanf("%d %d",&w,&h);
for(i=1;i<=h;i++)
{
for(j=1;j<=w;j++)
{
scanf(" %c",&map[i][j]);
}
}
for(i=1;i<=h;i++)
{
for(j=1;j<=w;j++)
{
if(map[i][j]=='L')
{
cnt++;
dfs(i,j);
}
}
}
printf("%d",cnt);
}
*/