#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <set>
void connect_check(int n, int complex, int x, int y, std::vector<std::vector<int>> &map) {
if (map[y][x] == 1) {
map[y][x] = complex;
if (x + 1 < n) { // 오른쪽
if (map[y][x + 1] == 1) {
connect_check(n, complex, x + 1, y, map);
}
else if (map[y][x + 1] > 1) {
map[y][x] = map[y][x + 1];
}
}
if (y + 1 < n) { // 아래쪽
if (map[y + 1][x] == 1) {
connect_check(n, complex, x, y + 1, map);
}
else if (map[y + 1][x] > 1) {
map[y][x] = map[y + 1][x];
}
}
if (x > 0) { // 왼쪽
if (map[y][x - 1] == 1) {
connect_check(n, complex, x - 1, y, map);
}
else if (map[y][x - 1] > 1) {
map[y][x] = map[y][x - 1];
}
}
if (y > 0) { // 위쪽
if (map[y - 1][x] == 1) {
connect_check(n, complex, x, y - 1, map);
}
else if (map[y - 1][x] > 1) {
map[y][x] = map[y - 1][x];
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (map[i][j] == 1) {
connect_check(n, complex + 1, j, i, map);
}
}
}
return;
}
int main(void) {
std::string line;
int n;
int complex = 0;
std::cin >> n;
std::vector<std::vector<int>> map(n, std::vector<int>(n));
std::vector<int> complexes(n*n);
std::set<int> count_complex;
for (int i = 0; i < n; i++) {
std::cin >> line;
for (int j = 0; j < n; j++) {
map[i][j] = line[j] - '0'; // char '1' 을 int 1로 변환
}
}
connect_check(n, 2, 0, 0, map);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (map[i][j] > 0) {
complexes[map[i][j]]++;
count_complex.insert(map[i][j]);
}
}
}
std::sort(complexes.begin(), complexes.end());
std::cout << count_complex.size() << std::endl;
for (std::vector<int>::iterator itr = complexes.begin(); itr != complexes.end(); ++itr) {
if (*itr != 0) {
std::cout << *itr << std::endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c2V0PgoKdm9pZCBjb25uZWN0X2NoZWNrKGludCBuLCBpbnQgY29tcGxleCwgaW50IHgsIGludCB5LCBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxpbnQ+PiAmbWFwKSB7CgogIGlmIChtYXBbeV1beF0gPT0gMSkgewoKICAgIG1hcFt5XVt4XSA9IGNvbXBsZXg7CgogICAgaWYgKHggKyAxIDwgbikgeyAvLyDsmKTrpbjsqr0KICAgICAgaWYgKG1hcFt5XVt4ICsgMV0gPT0gMSkgewogICAgICAgIGNvbm5lY3RfY2hlY2sobiwgY29tcGxleCwgeCArIDEsIHksIG1hcCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAobWFwW3ldW3ggKyAxXSA+IDEpIHsKICAgICAgICBtYXBbeV1beF0gPSBtYXBbeV1beCArIDFdOwogICAgICB9CiAgICB9CiAgICBpZiAoeSArIDEgPCBuKSB7IC8vIOyVhOuemOyqvQogICAgICBpZiAobWFwW3kgKyAxXVt4XSA9PSAxKSB7CiAgICAgICAgY29ubmVjdF9jaGVjayhuLCBjb21wbGV4LCB4LCB5ICsgMSwgbWFwKTsKICAgICAgfQogICAgICBlbHNlIGlmIChtYXBbeSArIDFdW3hdID4gMSkgewogICAgICAgIG1hcFt5XVt4XSA9IG1hcFt5ICsgMV1beF07CiAgICAgIH0KICAgIH0KICAgIGlmICh4ID4gMCkgeyAvLyDsmbzsqr0KICAgICAgaWYgKG1hcFt5XVt4IC0gMV0gPT0gMSkgewogICAgICAgIGNvbm5lY3RfY2hlY2sobiwgY29tcGxleCwgeCAtIDEsIHksIG1hcCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAobWFwW3ldW3ggLSAxXSA+IDEpIHsKICAgICAgICBtYXBbeV1beF0gPSBtYXBbeV1beCAtIDFdOwogICAgICB9CiAgICB9CiAgICBpZiAoeSA+IDApIHsgLy8g7JyE7Kq9CiAgICAgIGlmIChtYXBbeSAtIDFdW3hdID09IDEpIHsKICAgICAgICBjb25uZWN0X2NoZWNrKG4sIGNvbXBsZXgsIHgsIHkgLSAxLCBtYXApOwogICAgICB9CiAgICAgIGVsc2UgaWYgKG1hcFt5IC0gMV1beF0gPiAxKSB7CiAgICAgICAgbWFwW3ldW3hdID0gbWFwW3kgLSAxXVt4XTsKICAgICAgfQogICAgfQoKICB9CgogIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykgewogICAgICBpZiAobWFwW2ldW2pdID09IDEpIHsKICAgICAgICBjb25uZWN0X2NoZWNrKG4sIGNvbXBsZXggKyAxLCBqLCBpLCBtYXApOwogICAgICB9CiAgICB9CiAgfQoKICByZXR1cm47Cn0KCmludCBtYWluKHZvaWQpIHsKCiAgc3RkOjpzdHJpbmcgbGluZTsKICBpbnQgbjsKICBpbnQgY29tcGxleCA9IDA7CgogIHN0ZDo6Y2luID4+IG47CgogIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGludD4+IG1hcChuLCBzdGQ6OnZlY3RvcjxpbnQ+KG4pKTsKICBzdGQ6OnZlY3RvcjxpbnQ+IGNvbXBsZXhlcyhuKm4pOwogIHN0ZDo6c2V0PGludD4gY291bnRfY29tcGxleDsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgIHN0ZDo6Y2luID4+IGxpbmU7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykgewogICAgICBtYXBbaV1bal0gPSBsaW5lW2pdIC0gJzAnOyAvLyBjaGFyICcxJyDsnYQgaW50IDHroZwg67OA7ZmYCiAgICB9CiAgfQoKICBjb25uZWN0X2NoZWNrKG4sIDIsIDAsIDAsIG1hcCk7CgogIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykgewogICAgICBpZiAobWFwW2ldW2pdID4gMCkgewogICAgICAgIGNvbXBsZXhlc1ttYXBbaV1bal1dKys7CiAgICAgICAgY291bnRfY29tcGxleC5pbnNlcnQobWFwW2ldW2pdKTsKICAgICAgfQogICAgfQogIH0KCiAgc3RkOjpzb3J0KGNvbXBsZXhlcy5iZWdpbigpLCBjb21wbGV4ZXMuZW5kKCkpOwoKICBzdGQ6OmNvdXQgPDwgY291bnRfY29tcGxleC5zaXplKCkgPDwgc3RkOjplbmRsOwoKICBmb3IgKHN0ZDo6dmVjdG9yPGludD46Oml0ZXJhdG9yIGl0ciA9IGNvbXBsZXhlcy5iZWdpbigpOyBpdHIgIT0gY29tcGxleGVzLmVuZCgpOyArK2l0cikgewogICAgaWYgKCppdHIgIT0gMCkgewogICAgICBzdGQ6OmNvdXQgPDwgKml0ciA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgfQoKICByZXR1cm4gMDsKfQ==