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

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

탑 세우기

시간 제한10초메모리 제한256 MB

요약
1부터 n까지 높이를 행과 열에 겹치지 않게 채워 고정된 칸과 가장자리 가시성 조건을 만족하는 사전순 최소 배치를 출력합니다.
난이도

보통10점 중 6점

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

문제

n×nn \times n 격자의 각 칸에 탑을 하나씩 세운다. 탑의 높이는 11 이상 nn 이하의 정수이고, 같은 높이의 탑이 한 행이나 한 열에 두 번 나타나면 안 된다. 그래서 각 행과 각 열에는 11부터 nn까지의 높이가 정확히 한 번씩 나온다.

퍼즐에는 두 종류의 조건이 붙는다.

첫째, 격자 안의 몇몇 칸은 세울 탑의 높이가 미리 정해져 있다.

둘째, 격자 둘레의 몇몇 자리에는 숫자가 적혀 있다. 그 숫자는 그 자리에서 해당 행이나 열을 들여다볼 때 보이는 탑의 개수다. 높은 탑은 뒤에 있는 낮은 탑을 완전히 가리므로, 어떤 탑은 보는 사람과 자기 사이에 있는 모든 탑보다 높을 때만 보인다.

모든 조건을 만족하는 배치를 구하여라.

입력

첫 줄에 퍼즐의 개수 TT가 주어진다. (1≤T≤1001 \le T \le 100)

각 퍼즐은 격자의 크기 nn이 적힌 줄로 시작하고 (3≤n≤53 \le n \le 5), 이어서 길이가 n+2n+2인 줄이 n+2n+2개 온다.

그중 첫 줄은 위쪽 둘레, 마지막 줄은 아래쪽 둘레다. 가운데 nn개 줄의 첫 글자는 왼쪽 둘레, 마지막 글자는 오른쪽 둘레다. 둘레에 적힌 숫자는 그 방향에서 보이는 탑의 개수이고, '-'는 그 방향에 조건이 없다는 뜻이다. 네 모서리는 항상 '-'다.

가운데 nn개 줄의 안쪽 nn글자는 격자의 칸이다. 숫자는 그 칸에 세울 탑의 높이이고, '-'는 높이가 정해져 있지 않다는 뜻이다.

퍼즐에 나오는 모든 글자는 '-'이거나 11 이상 nn 이하의 숫자다.

출력

퍼즐마다 답을 길이 nn인 줄 nn개로 출력하고, 그 뒤에 빈 줄 하나를 출력한다.

답이 여러 개면 사전순으로 가장 앞서는 것을 출력한다. 두 답은 격자를 위에서 아래로, 각 행은 왼쪽에서 오른쪽으로 읽어 이어 붙인 n2n^2자리 문자열로 비교한다.

풀 수 없는 퍼즐이면 no 한 단어만 출력하고, 그 뒤에 빈 줄 하나를 출력한다.

예제2

  1. 예제 1

    입력
    5
    5
    -------
    -------
    -------
    -------
    -------
    -------
    -------
    5
    -41223-
    2-----3
    3-----2
    2-----1
    1-----5
    3-----2
    -23212-
    3
    -111-
    ----3
    2---2
    ----2
    -131-
    5
    --33---
    ------3
    -------
    ------3
    -------
    3------
    --324--
    5
    -----1-
    -------
    2--3--3
    2-----2
    -1-----
    ----1-2
    -------
    
    예상 출력
    12345
    21453
    34512
    45231
    53124
    
    15243
    23514
    42135
    54321
    31452
    
    no
    
    51243
    24351
    45132
    13524
    32415
    
    31425
    25341
    42153
    14532
    53214
    
  2. 예제 2

    입력
    1
    3
    -231-
    -----
    -----
    -----
    -----
    
    예상 출력
    213
    321
    132