유역 구분 (작은 입력)
면접 대비시간 제한5초메모리 제한512 MB
높이 격자가 주어지면 각 칸의 물이 흘러가는 싱크를 따라가 같은 싱크로 모이는 칸을 한 유역으로 묶고, 행 우선 문자열이 사전순으로 가장 작아지도록 유역에 알파벳을 붙인다.
문제
지질학자는 비가 흘러내리는 방향에 따라 땅을 여러 영역으로 나눈다. 이렇게 나눈 각 영역을 유역이라고 한다.
고도 지도가 주어진다. 고도 지도는 각 칸의 고도를 담은 2차원 배열이다. 같은 유역에 속한 칸이 같은 이름표를 갖도록 지도에 이름표를 붙이자. 규칙은 다음과 같다.
- 각 칸에서 물은 인접한 네 칸(북, 서, 동, 남) 중 최대 한 칸으로만 흘러내린다.
- 어떤 칸의 인접한 네 칸 중 그 칸보다 고도가 낮은 칸이 하나도 없으면 물은 흘러나가지 않는다. 이런 칸을 싱크라고 한다.
- 그렇지 않으면 물은 고도가 가장 낮은 인접 칸으로 흐른다.
- 고도가 가장 낮은 인접 칸이 여러 개면 북, 서, 동, 남 순서에서 가장 앞선 칸으로 흐른다.
바로 또는 여러 칸을 거쳐 같은 싱크로 물이 모이는 칸은 모두 같은 유역에 속하고, 싱크 자신도 그 유역에 속한다. 각 유역에 서로 다른 소문자를 붙이되, 이름표를 붙인 지도의 각 행을 위에서 아래로 이어 붙인 문자열이 사전순으로 가장 앞서도록 붙인다. 따라서 가장 북서쪽 칸이 속한 유역의 이름표는 항상 a다.
입력
첫 줄에 지도의 개수 가 주어진다.
각 지도의 첫 줄에는 지도의 높이 와 너비 가 칸 단위로 주어진다. 이어지는 개의 줄은 지도의 각 행을 북쪽에서 남쪽 순서로 나타낸다. 각 줄에는 개의 정수가 서쪽에서 동쪽 순서로 주어지며, 이 값이 각 칸의 고도다.
제한
- 고도
- 한 지도의 유역은 최대 26개다
출력
각 지도마다 개의 줄을 출력한다. 첫 줄은
Case #X:
형태이고, 는 1부터 시작하는 지도의 번호다. 이어지는 개의 줄에는 입력과 같은 순서로 각 칸이 속한 유역의 이름표를 출력한다. 지도의 한 행을 한 줄에 출력하고, 같은 줄의 이름표 사이는 공백 하나로 구분한다.
힌트
첫 번째 예제에서는 오른쪽 위 칸과 왼쪽 아래 칸이 싱크다. 대각선 위의 물은 5가 6보다 낮으므로 왼쪽 아래로 흐른다.