August 18, 2021
import sys
input = sys.stdin.readline
n = int(input())
board = [] * n
for _ in range(n):
    temp = list(input())
    board.append(list(map(int, temp[:-1])))
move = [(0, -1), (0, 1), (-1, 0), (1, 0)]
visited = [[False] * (n) for _ in range(n)]
answer = []
def dfs(i, j):
    global count
    count += 1
    visited[i][j] = True
    for idx in range(4):
        nx = i + move[idx][0]
        ny = j + move[idx][1]
        if 0 <= nx < n and 0 <= ny < n and not visited[nx][ny] and board[nx][ny] == 1:
            dfs(nx, ny)
count = 0
for i in range(n):
    for j in range(n):
        if not visited[i][j] and board[i][j] == 1:
            count = 0
            dfs(i, j)
            answer.append(count)
answer.sort()
print(len(answer))
for a in answer:
    print(a)