2667번
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, cnt, map[25][25], visit[25][25];
int dx[4] = { -1,1,0,0 }, dy[4] = { 0,0,-1,1 };
vector<int> v;
void dfs(int x, int y) {
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 && map[tmpX][tmpY] == 1 && !visit[tmpX][tmpY]) {
cnt++;
visit[tmpX][tmpY] = true;
dfs(tmpX, tmpY);
}
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf_s("%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]) {
cnt = 1;
visit[i][j] = true;
dfs(i, j);
v.push_back(cnt);
}
}
}
sort(v.begin(), v.end());
cout << v.size() << endl;
for (int i = 0; i < v.size(); i++) {
cout << v[i] << endl;
}
}