만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

군도

시간 제한0.5초메모리 제한1024 MB

요약
모든 물 칸이 배의 시야에 들어가고, 항구의 상하좌우에 놓인 배 수가 항구 숫자와 같도록 물 칸에 배를 배치합니다.
난이도

보통10점 중 5점

유형
백트래킹, 완전 탐색, 행렬
정답자
아직 제출이 없습니다

문제

당신은 군도를 지키기 위해 자국 함대의 함선을 배치하는 임무를 맡았습니다. 군도 지도는 칸으로 나뉘며, 바다 칸마다 최소 한 척의 함선이 감시해야 합니다.

배치 조건은 다음과 같습니다.

  • 각 함선은 자신이 놓인 칸의 가로, 세로 방향을 감시할 수 있습니다. 다만 육지 칸에 시야가 막히면 예외입니다.
  • 함선은 바다 칸에만 놓을 수 있습니다.
  • 일부 육지 칸은 항구이며 특별한 요구 조건이 있습니다. 항구는 북, 남, 동, 서로 인접한 칸에 정해진 수만큼 함선이 있어야 합니다.
  • 아군 오인 사격을 막기 위해, 함선은 같은 함대의 다른 함선이 있는 바다 칸을 감시할 수 없습니다.

위 조건을 만족하는 함선 배치를 찾으세요. 그런 배치가 없다면 그 사실을 알리세요.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫 줄에는 공백으로 구분된 두 정수 1≤n≤81 \le n \le 8과 1≤m≤81 \le m \le 8이 주어집니다. n은 지도의 행 수, m은 열 수입니다.

이어서 m개의 문자로 이루어진 n개의 줄이 지도를 나타냅니다. .은 바다 칸, X는 육지 칸입니다. 0부터 4 사이의 숫자는 항구이며, 그 값은 인접한 칸에 있어야 하는 함선의 정확한 수입니다.

n = m = 0인 줄은 입력의 끝을 나타내며, 처리하지 않습니다.

출력

각 테스트 케이스에 대해 조건을 만족하는 배치가 존재하면, 입력 지도를 복사하되 함선이 놓인 칸을 N으로 표시하여 출력합니다. 그런 배치가 없으면 IMPOSSIVEL 한 줄만 출력합니다.

해답이 여러 개라면 그중 어느 것이든 허용됩니다.

예제1

  1. 예제 1

    입력
    4 4
    ...1
    X...
    X...
    ..2.
    7 7
    ....2X.
    X..3...
    1......
    .X...3.
    ......X
    ...0..X
    .XX....
    0 0
    
    예상 출력
    ..N1
    X...
    X...
    .N2N
    ...N2X.
    X.N3N..
    1....N.
    NX.N.3N
    .....NX
    .N.0..X
    .XX...N