2667
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n;
int map[25][25];
bool visit[25][25] = {false,};
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
int sum = 1;
void dfs(int x, int y, int cnt) {
for(int i=0; i<4; i++) {
int tmpx = x + dx[i];
int tmpy = y + dy[i];
if(tmpx<0 || tmpx>=n || tmpy<0 || tmpy>=n) continue;
if(map[tmpx][tmpy]==1 && !visit[tmpx][tmpy]) {
visit[tmpx][tmpy] = true;
sum++;
dfs(tmpx, tmpy, cnt+1);
}
}
}
int main() {
vector<int> result;
cin >> n;
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
scanf("%1d", &map[i][j]);
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
if(map[i][j]==1 && !visit[i][j]) {
sum = 1;
visit[i][j] = true;
dfs(i,j,1);
result.push_back(sum);
}
}
}
sort(result.begin(), result.end());
cout<<result.size()<<endl;
for(int i=0; i<result.size(); i++) {
cout<<result[i]<<endl;
}
}