A-maze-ing Lakes
면접 대비시간 제한10초메모리 제한1024 MB
0과 1로 이루어진 격자에서 상하좌우로 이어진 물 칸 덩어리의 개수를 세고, 각 호수의 넓이를 작은 순서로 출력합니다.
문제
환경 기관이 여러 지역의 호수를 조사하려고 한다. 이 조사는 지역별로 호수의 크기와 분포를 추정하는 더 큰 프로그램의 첫 단계다. 이 단계에서는 항공 사진으로 추정한다. 조사할 호수가 많아서 기관은 이 작업을 컴퓨터 프로그램에 맡기기로 했다. 구체적으로, 프로그램은 아래와 같은 두 가지 색 이미지를 입력받는다.

과제는 호수(이미지에서 파란색으로 표시된 부분)의 개수와 각 호수의 넓이를 구하는 것이다. 이미지는 2차원 타일 배열이며, 각 타일은 육지 또는 물이다. 타일 하나는 1제곱미터에 해당한다. 물 타일 하나가 주어지면, 그 타일에서 상하좌우 방향으로 물 타일만 거쳐 도달할 수 있는 모든 물 타일이 같은 호수에 속한다. 대각선 이동은 허용되지 않는다. 이미지 가장자리의 타일은 항상 육지라고 가정해도 된다.
입력
첫 줄에 공백 하나로 구분된 두 정수 N과 M이 주어진다(, ). 이는 N행 M열의 2차원 타일 배열을 뜻한다. 이어지는 N줄에는 각각 정확히 M글자로 이루어진 문자열이 주어진다. 0은 육지 타일, 1은 물 타일을 나타낸다.
출력
첫 줄에 서로 다른 호수의 개수 K를 출력한다. 둘째 줄에는 각 호수의 넓이(제곱미터)를 공백으로 구분하여 작은 값부터 큰 값 순서로 K개 출력한다.