/*
#include<stdio.h>
int main()
{
int i,n,j;
scanf("%d",&n);
for(i=0; i<n/2+1; i++)
{
for(j=0; j<n/2-i; j++)
{
printf(" ");
}
for(j=0; j<i*2+1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
#include<stdio.h>
int main()
{
int n,i,j;
int arr[26]={};
char str[90]={};
gets(str);
for(i=0;i<strlen(str);i++)
{
arr[str[i]-97]++;
}
for(i=0;i<26;i++)
{
printf("%c:%d\n",i+97,arr[i]);
}
return 0;
}
#include<stdio.h>
int abs(int k)
{
if(k<0) return -k;
return k;
}
int main()
{
int n,i,j,x,y;
int arr[101][101]={};
scanf("%d %d %d",&n,&x,&y);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
arr[i][j]=abs(x-i)+abs(y-j)+1;
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
#include<stdio.h>
int main()
{
int i,n;
char str[100],str1[100];
scanf("%s %s",str,str1);
if(strlen(str)>strlen(str1))
{
printf("%s %s",str1,str);
}
else if(strlen(str1)>strlen(str))
{
printf("%s %s",str,str1);
}
else
{
for(i=0; i<strlen(str); i++)
{
if(str[i]>str1[i])
{
printf("%s %s",str1,str);
break;
}
else if(str1[i]>str[i])
{
printf("%s %s",str,str1);
break;
}
}
}
return 0;
}
*/
#include<stdio.h>
int num=0;
int arr[27][27]={};
int dfs2;
void dfs(int x, int y)
{
num++;
arr[x][y]=-1;
if(arr[x][y+1]==1)
{
dfs(x,y+1);
}
if(arr[x][y-1]==1)
{
dfs(x,y-1);
}
if(arr[x+1][y]==1)
{
dfs(x+1,y);
}
if(arr[x-1][y]==1)
{
dfs(x-1,y);
}
}
int main()
{
int n,temp,i,j,cnt=0,p[20]={};
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%1d",&arr[i][j]);
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(arr[i][j]==1 && arr[i][j]!=-1)
{
num=0;
dfs(i,j);
cnt++;
p[cnt]=num;
num=0;
}
}
}
printf("%d\n",cnt);
//p배열을 오름차순으로 정렬하기!!
for(i=1; i<n; i++)
{
for(j=0;j<n-i-1;j++)
{
if (p[j] > p[j+1])
{
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
for(i=1;i<=cnt;i++)
{
printf("%d\n",p[i]);
}
}