/*
#include <stdio.h>
#include <stdlib.h>
int main()
{
double time, time_;
int money=0, i, j;
for(i=0; i<5; i++)
{
scanf("%lf %lf", &time, &time_);
if(time_-time<=1)
{
money+=0;
}
else if(time_-time>=5)
{
money+=40000;
}
else
{
money += (time_-time-1)*10000;
}
}
if(money>=150000)
{
money/=100;
money*=95;
}
else if(money<=50000)
{
money/=100;
money*=105;
}
printf("%d", money);
}
*/
/*
#include<stdio.h>
int map[101][101]= {}, visited[101]= {};
int stack[101],top=-1;
void push(int a)
{
top++;
stack[top]=a;
}
int pop()
{
if(top==-1)
{
return -1;
}
return stack[top--];
}
int main()
{
int n, n1, i, a, b,x;
scanf("%d %d", &n,&n1);
for(i=0; i<n1; i++)
{
scanf("%d %d", &a, &b);
map[a][b]=1;
map[b][a]=1;
}
//////////////
visited[1]=1;
x=1;
a=0;
while(x!=-1)
{
for(i=1; i<=n; i++)
{
if(map[x][i]==1&&visited[i]==0)
{
push(x);
visited[i]=1;
x=i;
break;
}
}
if(i==n+1) x=pop();
}
for(i=2;i<=n;i++)
{
a+=visited[i];
}
printf("%d", a);
return 0;
}
*/
#include <stdio.h>
#define SIZE 25
int i, j,cnt=0;
int map[SIZE][SIZE]={};
int n, c[25]={}, a;
void dfs(int x,int y)
{
if(x>=0&&x<n &&y>=0&&y<n &&map[x][y]==1)
{
map[x][y]=-1;
c[i]++;
a=i;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
}
int main()
{
scanf("%d", &n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%1d", &map[i][j]);
}
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(map[i][j]==1)
{
cnt++;
dfs(i,j);
}
}
}
printf("%d",cnt);
for(i=0; i<=a; i++)
{
printf("%d\n", c[i]);
}
return 0;
}
/*
4051 O
4816
1513
*/