아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

별이 빛나는 밤

시간 제한1초메모리 제한128 MB

요약
격자에서 8방향으로 연결된 별 무리를 찾고, 회전과 대칭으로 같아지는 무리에는 같은 문자를 부여한다.
난이도

보통10점 중 6점

유형
DFS, 행렬, 해시맵, 기하
정답자
아직 제출이 없습니다

문제

밤하늘 높이, 빛나는 별들은 다양한 모양의 무리를 이루어 나타난다. 무리(cluster) 는 가로, 세로, 또는 대각선 방향으로 인접한 별들이 모인 비어 있지 않은 집합이다. 무리는 극대(maximal)이다. 즉, 더 큰 무리의 일부가 될 수 없다.

서로 다른 무리가 닮은(similar) 관계일 수 있다. 두 무리는 방향(회전·대칭)에 관계없이 모양과 별의 개수가 같으면 닮았다고 한다. 일반적으로 하나의 무리는 여덟 가지 방향으로 나타날 수 있다(네 가지 회전 각각에 대해 좌우 대칭 여부). 아래 그림이 그 예이다.

여덟 개의 닮은 무리

여덟 개의 닮은 무리.

밤하늘은 하늘 지도(sky map) 로 표현되며, 이는 0과 1로 이루어진 2차원 행렬이다. 각 칸은 별이 있으면 1, 없으면 0이다.

각 무리를 하나의 소문자로 표시한다. 즉, 그 무리에 속한 모든 1을 해당 소문자로 바꾼다. 닮은 무리끼리는 같은 문자로, 닮지 않은 무리끼리는 서로 다른 문자로 표시해야 한다.

입력

첫째 줄에 하늘 지도의 너비 WW가, 둘째 줄에 높이 HH가 주어진다. 이어지는 HH개의 줄에 하늘 지도가 주어지며, 각 줄은 정확히 WW개의 문자(0 또는 1)로 이루어진다.

  • 0≤W≤1000 \le W \le 100
  • 0≤H≤1000 \le H \le 100
  • 0≤0 \le 무리의 개수 ≤500\le 500
  • 0≤0 \le 닮지 않은 무리의 개수 ≤26\le 26 (문자 a..z)
  • 1≤1 \le 한 무리에 속한 별의 개수 ≤160\le 160

출력

모든 무리를 표시한 하늘 지도를 출력한다. 답을 유일하게 만들기 위해 다음 규칙으로 문자를 배정한다.

지도를 행 우선 순서(위에서 아래로, 각 줄에서는 왼쪽에서 오른쪽으로)로 훑는다. 아직 어떤 무리에도 속하지 않은 별을 처음 만나면, 그 별에서 새로운 무리가 시작되며 그 무리의 모양을 구한다. 모양과 문자의 대응은 처음 나타난 순서대로 만든다. 즉, 처음 등장한 모양은 a, 그다음에 새로 등장한 모양은 b, 그다음은 c, … 로 표시한다. 어떤 무리의 모양이 이미 앞에서 나타났다면(앞선 무리와 닮았다면) 그 모양에 배정된 문자를 다시 사용한다.

각 무리의 모든 1을 배정된 문자로 바꾸어 HH개의 줄을 출력한다.

힌트

아래 예제의 하늘 지도는 너비 23, 높이 15이다. 이 지도는 다음과 같은 밤하늘 그림에 해당한다.

밤하늘 그림

밤하늘 그림.

무리를 모두 표시하면 그림은 다음과 같아진다.

무리를 표시한 그림

무리를 표시한 그림.

예제1

  1. 예제 1

    입력
    23
    15
    10001000000000010000000
    01111100011111000101101
    01000000010001000111111
    00000000010101000101111
    00000111010001000000000
    00001001011111000000000
    10000001000000000000000
    00101000000111110010000
    00001000000100010011111
    00000001110101010100010
    00000100110100010000000
    00010001110111110000000
    00100001110000000100000
    00001000100001000100101
    00000001110001000111000
    
    예상 출력
    a000a0000000000b0000000
    0aaaaa000ccccc000d0dd0d
    0a0000000c000c000dddddd
    000000000c0b0c000d0dddd
    00000eee0c000c000000000
    0000e00e0ccccc000000000
    b000000e000000000000000
    00b0f000000ccccc00a0000
    0000f000000c000c00aaaaa
    0000000ddd0c0b0c0a000a0
    00000b00dd0c000c0000000
    000g000ddd0ccccc0000000
    00g0000ddd0000000e00000
    0000b000d0000f000e00e0b
    0000000ddd000f000eee000