from collections import deque
def bfs(n,maps):
global count
global apt
count +=1
apt =1
dx = [0,0,-1,1]
dy = [1,-1,0,0]
while q:#q가 있는동안 계속도는데
for _ in range(len(q)): #q안에 있는 수만큼 반복
x,y = q.popleft()#큐에서 한개를 뺀다.
maps[x][y] = count
visited[x][y] =1
for i in range(4):
nx = x+ dx[i]
ny = y+ dy[i]
if 0<=nx <n and 0<=ny<n:
if maps[nx][ny] ==1 and visited[nx][ny] ==0:
q.append([nx,ny])
visited[nx][ny] =1
maps[nx][ny] = count
apt +=1
count_apt.append(apt)
n = int(input())
q = deque()
count = 0
apt = 0
count_apt = []
maps = []
for _ in range(n): #maps구성
row = list(map(int,list(input())))
maps.append(row)
visited = [ [0]*n for _ in range(n)]#visited 리스트 선언
for x in range(n):
for y in range(n):
if maps[x][y] == 1 and visited[x][y] ==0:
q.append([x,y])
bfs(n,maps)
num = max(map(max,maps))
print(num)
count_apt.sort()
for i in range(len(count_apt)):
print(count_apt[i])