/*
#include <stdio.h>//4503 : 바이러스 BFS(큐)
int n,e,k=0,a[101][101]={},check[101]={};
int queue[150]={};
int front=-1, back = -1;
void push(int x)
{
check[x]=1; //방문표시
back++;
queue[back]=x;
}
int pop()
{
if(front==back) return -1;
front++;
return queue[front];
}
void bfs(int x)
{
push(x);
while(front!=back){
int tmp = pop();
// tmp와 연결 되어있으면서 방문하지 않은 노드 모두 push
for(int j=1; j<=n; j++){
if(a[tmp][j]==1 && check[j]!=1){
k++;
push(j);
}
}
}
}
int main()
{
int i,j,x,y;
scanf("%d %d",&n,&e);
for(i=0; i<e; i++){
scanf("%d %d",&x,&y);
a[x][y]=1;
a[y][x]=1;
}
bfs(1);
printf("%d",k);
return 0;
}
*/
/*
#include <stdio.h>//4421 : 단지 번호 붙이기(DFS)
#include <stdlib.h>
int n=0,k=0,a[26][26]={},apt[626];
void dfs(int x,int y)
{
if(x>n || y>n || a[x][y]==0){
return ;
}
a[x][y] = 0;
k++;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
int arr(int* pa,int *pb)
{
if(*pa > * pb) return 1;
else return -1;
}
int main()
{
int i,j,cmp=0;
scanf("%d",&n);
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
scanf("%1d",&a[i][j]);
}
}
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
if(a[i][j]==1){
k=0;
dfs(i,j);
apt[cmp++]=k;
}
}
}
qsort(&apt[0],cmp,sizeof(int),arr);
printf("%d\n",cmp);
for(i=0; i<cmp; i++){
printf("%d\n",apt[i]);
}
return 0;
}
*/
#include <stdio.h>//4421 : 단지 번호 붙이기(EFS)
int n,k=0,a[26][26]={},apt[626]={};
int q[626]={},front=-1,back=-1;
void push(int x,int y)
{
}
void pop()
{
}
void dfs(int x, int y)
{
if()
}
int main()
{
int i,j,cmp=0;
scanf("%d",&n);
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
scanf("%1d",&a[i][j]);
}
}
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
if(a[i][j]==1){
dfs(i,j);
}
}
}
return 0;
}