/*
#include <stdio.h>
#define size 2001
int queue[size][2],rear=-1,front=-1;
void enqueue(int x,int y)
{
if(rear+1!=size)
{
queue[++rear][0]=x;
queue[rear][1]=y;
}
}
void dequeue()
{
if(front!=rear)
{
//return queue[++front];
}
}
int main()
{
int i,j,cnt,n,m;
int map[1001][1001]={};
scanf("%d %d",&m,&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%d",&map[i][j]);
if(map[i][j]==1)
{
enqueue(i,j);
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
dequeue();
if(i>1&&map[i-1][j]==1) enqueue(i,j);
if(i<n&&map[i+1][j]==1) enqueue(i,j);
if(j<m&&map[i][j+1]==1) enqueue(i,j);
if(j>1&&map[i][j-1]==1) enqueue(i,j);
}
}
}
*/
#include <stdio.h>
int map[26][26],i,j,cnt=0,a;
int c[50000]={};
void dfs(int x, int y)
{
if(map[x][y]==1)
{
c[cnt]++;
map[x][y]=-1;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
}
int main()
{
scanf("%d",&a);
for(i=1;i<=a;i++)
{
for(j=1;j<=a;j++)
{
scanf("%1d",&map[i][j]);
}
}
for(i=1;i<=a;i++)
{
for(j=1;j<=a;j++)
{
if(map[i][j]==1)
{
cnt++;
dfs(i,j);
}
}
}
printf("%d\n",cnt);
for(i=1;i<=cnt;i++)
{
printf("%d\n",c[i]);
}
/*
for(i=1;i<=a;i++)
{
for(j=1;j<=a;j++)
{
printf("%d ",map[i][j]);
}
printf("\n");
}
*/
return 0;
}