#include <iostream>
#include <queue>
#include <stdio.h>
#include <string>
#include <cmath>
#include <algorithm>
int arr[25][25];
int visited[25][25];
bool Done[25][25];
int dx[4] = { -1,1,0,0 };
int dy[4] = { 0,0,-1,1 };
int t, n;
std::vector<int> vec;
int cnt;
void bfs(int r, int c) {
visited[r][c] = 1;
cnt++;
for (int i = 0;i < 4;i++) {
if (r + dx[i] >= 0 && r + dx[i] < n && c + dy[i] >= 0 && c + dy[i] < n) {
if (arr[r + dx[i]][c + dy[i]] == 1 && visited[r + dx[i]][c + dy[i]] == 0) {
bfs(r + dx[i], c + dy[i]);
}
}
}
}
int main() {
scanf("%d", &n);
for (int i = 0;i < n;i++) {
for (int j = 0;j < n;j++) {
scanf("%1d", &arr[i][j]);
}
}
for (int i = 0;i < n;i++) {
for (int j = 0;j < n;j++) {
if (arr[i][j] == 1 && visited[i][j] == 0) {
cnt = 0;
bfs(i, j);
vec.push_back(cnt);
}
}
}
std::sort(vec.begin(), vec.end());
printf("%d\n", vec.size());
for (int i = 0;i < vec.size();i++) {
printf("%d\n", vec[i]);
}
bfs(0, 0);
}