
#include <cstdio>
using namespace std;
const int MAX = 25;
int n;
int mat[MAX][MAX];
int marked[MAX][MAX];
int cnt = 0;
int cntArr[MAX*MAX];
void dfs(int x, int y);
int main() {
int i, j, tmp;
scanf("%d", &n);
for (i=0;i<n;i++){
for(j=0;j<n;j++) {
scanf("%1d", &mat[i][j]);
marked[i][j] = 0;
cntArr[(i*j)+j] = 0;
}
}
for (i=0;i<n;i++){
for(j=0;j<n;j++) {
if (mat[i][j] && (!marked[i][j])) {
cnt++;
dfs(i,j);
}
}
}
printf("%d\n", cnt);
for (i=1; i<=cnt; i++) {
for(j=i+1;j<=cnt;j++) {
if(cntArr[i] > cntArr[j]) {
tmp = cntArr[i];
cntArr[i] = cntArr[j];
cntArr[j] = tmp;
}
}
}
for (i=1;i<=cnt;i++) {
printf("%d\n", cntArr[i]);
}
return 0;
}
void dfs(int x, int y) {
int i, j;
marked[x][y] = cnt;
cntArr[cnt]++;
if ((x!=0) && mat[x-1][y] && (!marked[x-1][y])) {
dfs(x-1, y);
}
if ((x!=n-1) && mat[x+1][y] && (!marked[x+1][y])) {
dfs(x+1, y);
}
if ((y!=0) && mat[x][y-1] && (!marked[x][y-1])) {
dfs(x, y-1);
}
if ((y!=n-1) && mat[x][y+1] && (!marked[x][y+1])) {
dfs(x, y+1);
}
}