부등호 퍼즐

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

요약
1부터 N^2까지의 정수를 N x N 격자에 채워 주어진 가로·세로 부등호를 모두 만족시킨다.
난이도

어려움10점 중 8점

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

문제

부등호 퍼즐은 11부터 N2N^2까지의 정수를 모두 이용하여 N×NN \times N 격자판을 채우는 퍼즐이다. 격자 칸 사이에는 부등호가 그려져 있는데, 인접한 두 격자 칸의 정수가 만족해야 하는 대소 관계를 의미한다. 예를 들어, 다음과 같은 3×33 \times 3 부등호 퍼즐이 주어졌다고 하자.

맨 왼쪽 맨 위에 위치한 격자판을 보자. 가로로 인접한 격자판과 세로로 인접한 격자판 사이에는 부등호가 적혀있다. 이때 다음 그림과 같이 주어진 대소 관계를 만족하면서 격자판에 정수를 채워 넣을 수 있다.

이와 같이 주어진 격자판 간의 대소 관계를 만족하면서 11부터 99까지의 모든 정수를 이용하여 다음과 같이 퍼즐을 완성할 수 있다.

N×NN \times N 부등호 퍼즐이 주어질 때 퍼즐의 해답을 출력하는 프로그램을 작성하라. 가능한 답이 여러 가지라면 그중 아무거나 하나를 출력한다.

입력

첫 번째 줄에 NN이 주어진다.

편의상, N×NN \times N 크기의 격자판을 다음과 같은 행렬 표현으로 서술하자.

A_1,1A_1,2A_1,3…A_1,N A_2,1A_2,2A_2,3…A_2,N A_3,1A_3,2A_3,3…A_3,N ⋮⋮⋮⋱⋮ A_N,1A_N,2A_N,3…A_N,N \begin{matrix} A\_{1, 1} & A\_{1, 2} & A\_{1, 3} & \ldots & A\_{1, N}\\\ A\_{2, 1} & A\_{2, 2} & A\_{2, 3} & \ldots & A\_{2, N}\\\ A\_{3, 1} & A\_{3, 2} & A\_{3, 3} & \ldots & A\_{3, N}\\\ \vdots & \vdots & \vdots & \ddots & \vdots \\\ A\_{N, 1} & A\_{N, 2} & A\_{N, 3} & \ldots & A\_{N, N}\\\ \end{matrix}

두 번째 줄부터 가로로 인접한 격자 칸이 만족해야 하는 대소 관계를 나타내는 N×(N−1)N \times (N-1) 크기의 부등호 행렬 RR이 주어진다.

R_1,1R_1,2R_1,3…R_1,N−1 R_2,1R_2,2R_2,3…R_2,N−1 R_3,1R_3,2R_3,3…R_3,N−1 ⋮⋮⋮⋱⋮ R_N,1R_N,2R_N,3…R_N,N−1 \begin{matrix} R\_{1, 1} & R\_{1, 2} & R\_{1, 3} & \ldots & R\_{1, N-1}\\\ R\_{2, 1} & R\_{2, 2} & R\_{2, 3} & \ldots & R\_{2, N-1}\\\ R\_{3, 1} & R\_{3, 2} & R\_{3, 3} & \ldots & R\_{3, N-1}\\\ \vdots & \vdots & \vdots & \ddots & \vdots \\\ R\_{N, 1} & R\_{N, 2} & R\_{N, 3} & \ldots & R\_{N, N-1}\\\ \end{matrix}

이때 부등호 행렬의 원소 R_r,cR\_{r, c}는 ‘<’이거나 ‘>’이며 각각의 의미는 다음과 같다.

  • ‘<’ 이면 A_r,c<A_r,c+1A\_{r, c} < A\_{r, c+1}을 만족해야 한다.
  • ‘>’ 이면 A_r,c>A_r,c+1A\_{r, c} > A\_{r, c+1}을 만족해야 한다.

이후에는 세로로 인접한 격자 칸이 만족해야 하는 대소관계를 나타내는 (N−1)×N(N-1) \times N 크기의 부등호 행렬 CC가 주어진다.

C_1,1C_1,2C_1,3…C_1,N C_2,1C_2,2C_2,3…C_2,N C_3,1C_3,2C_3,3…C_3,N ⋮⋮⋮⋱⋮ C_N−1,1C_N−1,2C_N−1,3…C_N−1,N \begin{matrix} C\_{1, 1} & C\_{1, 2} & C\_{1, 3} & \ldots & C\_{1, N}\\\ C\_{2, 1} & C\_{2, 2} & C\_{2, 3} & \ldots & C\_{2, N}\\\ C\_{3, 1} & C\_{3, 2} & C\_{3, 3} & \ldots & C\_{3, N}\\\ \vdots & \vdots & \vdots & \ddots & \vdots \\\ C\_{N-1, 1} & C\_{N-1, 2} & C\_{N-1, 3} & \ldots & C\_{N-1, N}\\\ \end{matrix}

부등호 행렬의 원소 C_r,cC\_{r, c}는 ‘<’이거나 ‘>’이며 각각의 의미는 다음과 같다.

  • ‘<’ 이면 A_r,c<A_r+1,cA\_{r, c} < A\_{r+1, c}을 만족해야 한다.
  • ‘>’ 이면 A_r,c>A_r+1,cA\_{r, c} > A\_{r+1, c}을 만족해야 한다.

항상 풀이가 존재하는 입력이 주어진다.

출력

NN개의 줄에 걸쳐 정수 NN개를 공백으로 구분하여 출력한다. ii번째 줄의 jj번째 수는 A_i,jA\_{i,j}에 적혀야 할 정수를 뜻한다.

제한

  • 2≤N≤1,0002 \le N \le 1{,}000

예제1

  1. 예제 1

    입력
    3
    > <
    > >
    < <
    < < >
    > > <
    
    예상 출력
    2 1 4
    8 7 3
    5 6 9