# DFS
import sys
sys.setrecursionlimit(10000)
# 단지 만들기
N = int(input())
matrix = [list(input()) for _ in range(N)]
for i in range(N):
for j in range(N):
matrix[i][j] = int(matrix[i][j])
# 다른 입력 방법! 찾다가 알게 됨!
# read = lambda : sys.stdin.readline().strip()
# matrix = [list(map(int, list(read()))) for _ in range(N)]
def DFS(matrix, cnt, x, y):
matrix[x][y] = 0 # visit 해줬으니 다시 안 가게 0으로 만들어주기
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= N or ny < 0 or ny >= N:
continue
if matrix[nx][ny] == 1:
cnt = DFS(matrix, cnt + 1, nx, ny)
return cnt
ans = []
for i in range(N):
for j in range(N):
if matrix[i][j] == 1:
ans.append(DFS(matrix, 1, i, j))
print(len(ans))
for i in sorted(ans):
print(i)
문제 출처: 백준2667번