https://www.acmicpc.net/problem/2667
DPS를 이용하여 집이 있는 곳을 찾으면 동서남북 네 방향에 더 이상 집이 없을 때까지 계속 탐색하는 과정 진행. 탐색을 완료한 미로는 0으로 방문처리

n = int(input())
maze = []
for i in range(n):
maze.append(list(map(int, input())))
cnt = 0
stack = []
#상하좌우
dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1]
res = []
for i in range(n):
for j in range(n):
if maze[i][j] == 1:
area = 1
maze[i][j] = 0 #방문처리
stack.append([i, j]) #위치저장
while stack:
y, x = stack.pop()
for k in range(4):
ny = y + dy[k]
nx = x + dx[k]
if (ny >= 0 and ny < n and nx >= 0 and nx < n) :
if maze[ny][nx] == 1:
area += 1
stack.append([ny, nx])
maze[ny][nx] = 0
cnt +=1
res.append(area)
print(cnt)
print('\n'.join(map(str,sorted(res))))