만드는 중입니다

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

구성 알고리즘 실력을 끝까지 끌어올리겠다

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

요약
높이가 1부터 n²까지 한 번씩 나타나는 n×n 격자에서, 모든 칸을 한 번씩 지나며 오르막 이동 횟수가 내리막 이동 횟수 이하가 되는 경로를 찾습니다.
난이도

어려움10점 중 8점

유형
행렬, 구현, 그리디
정답자
아직 제출이 없습니다

문제

BaoBao the Witch는 nn행 nn열 미로에 갇혀 있다. ii행 jj열 칸의 높이는 hi,jh_{i,j}이다. 미로에서 나가려면 모든 칸을 정확히 한 번씩 지나는 경로를 찾아야 한다. 이동할 수 있는 곳은 현재 칸과 변을 공유하는 인접한 칸뿐이다.

BaoBao는 매우 게으르다. 높이가 낮은 칸에서 높은 칸으로 올라갈 때마다 행복도가 떨어진다. 올라간 횟수가 내려간 횟수보다 많지 않도록 유효한 경로를 찾아라.

유효한 경로는 다음 조건을 만족하는 수열 (x1,y1),(x2,y2),…,(xn2,yn2)(x_1, y_1), (x_2, y_2), \ldots, (x_{n^2}, y_{n^2})이다.

  • 모든 1≤i≤n21 \le i \le n^2에 대해 1≤xi,yi≤n1 \le x_i, y_i \le n이다.
  • 모든 1≤i,j≤n21 \le i, j \le n^2에 대해 i≠ji \ne j이면 (xi,yi)≠(xj,yj)(x_i, y_i) \ne (x_j, y_j)이다.
  • 모든 2≤i≤n22 \le i \le n^2에 대해 ∣xi−xi−1∣+∣yi−yi−1∣=1|x_i - x_{i-1}| + |y_i - y_{i-1}| = 1이다.
  • ∑i=2n2[hxi−1,yi−1<hxi,yi]≤∑i=2n2[hxi−1,yi−1>hxi,yi]\sum_{i=2}^{n^2} [h_{x_{i-1},y_{i-1}} < h_{x_i,y_i}] \le \sum_{i=2}^{n^2} [h_{x_{i-1},y_{i-1}} > h_{x_i,y_i}]이다. 여기서 [P][P]는 PP가 참이면 1, 거짓이면 0이다.

모든 칸의 높이는 11부터 n2n^2까지의 순열이므로, 유효한 경로를 따라 각 칸의 높이를 출력하기만 하면 된다.

입력

여러 개의 테스트 케이스가 주어진다. 첫 줄에는 테스트 케이스의 개수 TT (1≤T≤1001 \le T \le 100)가 주어진다.

각 테스트 케이스의 첫 줄에는 미로의 크기 nn (2≤n≤642 \le n \le 64)이 주어진다. 이어서 nn개의 줄에 각각 nn개의 정수 hi,1,hi,2,…,hi,nh_{i,1}, h_{i,2}, \ldots, h_{i,n} (1≤hi,j≤n21 \le h_{i,j} \le n^2)이 주어진다. 입력의 모든 정수는 n2n^2의 순열을 이룬다.

출력

각 테스트 케이스마다 한 줄에 n2n^2개의 정수를 공백으로 구분하여 출력한다. 정수는 유효한 경로의 순서대로 각 칸의 높이이다. 답이 여러 개이면 아무거나 출력해도 된다. 답은 항상 존재한다.

예제1

  1. 예제 1

    입력
    1
    2
    4 3
    2 1
    
    예상 출력
    4 3 1 2