순열 복원

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

요약
1부터 N까지의 순열에 대한 모든 쌍의 크기 비교 결과가 주어질 때, 이를 만족하는 순열을 복원하거나 존재하지 않으면 -1을 출력한다.
난이도

보통10점 중 5점

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

문제

길이가 NN인 순열은 11부터 NN까지의 정수가 정확히 한 번씩 등장하는 수열을 의미한다. 예를 들어, \[1]\[1], \[3,1,4,2,5]\[3,1,4,2,5] 등은 순열이지만, \[−1,0,1,3,2]\[-1,0,1,3,2], \[1,3,5,4]\[1,3,5,4] 등은 순열이 아니다.

길이가 NN인 순열 PP에 대해 비교 행렬을 정의하자. 비교 행렬 AA는 N×NN\times N 크기이며, 각 원소 A_ijA\_{ij}는 P_iP\_i와 P_jP\_j의 상대적 크기에 따라 다음과 같이 정해진다.

  • P_i>P_jP\_i>P\_j이면 A_ij=−1A\_{ij}=-1이다.
  • P_i=P_jP\_i=P\_j이면 A_ij=0A\_{ij}=0이다.
  • P_i\<P_jP\_i\<P\_j이면 A_ij=1A\_{ij}=1이다.

비교 행렬 AA가 주어질 때, 순열 PP를 복원하는 프로그램을 작성하시오. 만약 비교 행렬이 AA와 같은 순열이 존재하지 않는다면 -1을 출력한다.

입력

첫째 줄에 정수 NN이 주어진다. (1≤N≤1,000)(1\leq N\leq 1\\, 000)

둘째 줄부터 NN개의 줄에 걸쳐 비교 행렬 AA가 주어진다. 그중 ii번째 줄에는 AA의 ii번째 행 A_i1,A_i2,⋯ ,A_iNA\_{i1},A\_{i2},\cdots ,A\_{iN}이 공백으로 구분되어 주어진다. 행렬의 모든 원소는 −1-1, 00, 11 중 하나이다.

출력

비교 행렬 AA를 만족하는 순열 PP가 존재한다면 P_1,P_2,⋯ ,P_NP\_1,P\_2,\cdots ,P\_N을 공백으로 구분하여 차례대로 출력한다. 가능한 순열이 여러 가지라면 아무거나 출력한다.

존재하지 않으면 -1을 출력한다.

예제1

  1. 예제 1

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