#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

int map[27][27];
int danji[320];
int n;

queue<int> Qx;
queue<int> Qy;

int main()
int i,j;
int cnt=0;
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);

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++;
map[i][j]=0;
Qx.push(i);
Qy.push(j);
danji[cnt]++;
while(!Qx.empty())
int x=Qx.front();Qx.pop();
int y=Qy.front();Qy.pop();
if(map[x-1][y]==1)
   map[x-1][y]=0;
   Qx.push(x-1);
   Qy.push(y);
   danji[cnt]++;
                    }
if(map[x+1][y]==1)
   map[x+1][y]=0;
   Qx.push(x+1);
   Qy.push(y);
   danji[cnt]++;
                    }
if(map[x][y-1]==1)
   map[x][y-1]=0;
   Qx.push(x);
   Qy.push(y-1);
   danji[cnt]++;
                    }
if(map[x][y+1]==1)
   map[x][y+1]=0;
   Qx.push(x);
   Qy.push(y+1);
   danji[cnt]++;
                    }
}
}
}
}

printf("%d\n",cnt);
sort(danji+1,danji+cnt+1);
for(i=1;i<=cnt;i++)
printf("%d\n",danji[i]);
}
return 0;
}