#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void DFS(int x, int y);
int arr[27][27] = { -1 };
int count;
int answer;
int S[3000] = {};
void sort(int S[], int k);
int main() {
int k = 0;
// N줄 변수 n 스캔한다
int n;
scanf("%d", &n);
// 중첩 반복문으로 2차원 배열 스캔
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
scanf("%1d", &arr[i][j]);
}
}
//for (int i = 1; i <= n; i++) {
// for (int j = 1; j <= n; j++) {
// printf("%d ", arr[i][j]);
// }
// printf("\n");
//}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (arr[i][j] != -1 && arr[i][j] != 0) {
//printf("%d %d\n", i, j);
DFS(i, j);
if (count > 0) {
answer++;
S[k] = count;
k++;
count = 0;
}
}
}
}
printf("%d\n", answer);
sort(S, k);
for (int i = 0; i < k; i++) {
printf("%d\n", S[i]);
}
}
void DFS(int x, int y) {
// 해당 값이 1인지를 확인 후 재귀 시작
if (arr[x][y] == 1)
{
arr[x][y] = -1;
count++;
DFS(x - 1, y);
DFS(x, y - 1);
DFS(x + 1, y);
DFS(x, y + 1);
}
}
void sort(int S[], int k) {
k--;
for (int i = 0; i < k; i++) {
for (int j = 0; j < k - i; j++) {
if (S[j] > S[j + 1])
{
int temp = S[j];
S[j] = S[j + 1];
S[j + 1] = temp;
}
}
}
}