만드는 중입니다

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

맥스와 거리

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

요약
n×n 거리 행렬이 주어질 때, 이를 생성하는 정렬된 점 배열 x와 순열 a, b를 복원합니다. 복원할 수 없으면 NO를 출력합니다.
난이도

보통10점 중 7점

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

문제

맥스는 직선 위에 있는 정수 점 nn개로 이루어진 배열 xx를 찾았다. 이 배열은 비내림차순으로 정렬되어 있다. 맥스에게는 11부터 nn까지의 수로 이루어진 순열 aa와 bb도 있다. 생일 선물로 받은 것이다.

맥스는 이 두 순열을 가지고 놀기로 했다. 거리 행렬 dd를 만들었고, 각 원소는 di,j=∣xai−xbj∣d_{i,j} = |x_{a_i} - x_{b_j}|이다. 즉 di,jd_{i,j}는 aia_i번 점과 bjb_j번 점 사이의 거리이다.

맥스가 놀던 중에 청소를 하던 캐티가 xx, aa, bb를 모두 치워 버렸다. 맥스에게 남은 것은 행렬 dd뿐이다. 맥스는 dd와 같은 행렬을 만드는 비내림차순 배열 xx와 순열 aa, bb를 복원하려고 한다. 다만 맥스가 dd를 잘못 계산했을 수도 있으며, 그 경우에는 xx, aa, bb를 복원할 수 없다.

맥스가 이것들을 복원하도록 도와라.

입력

첫 줄에 자연수 nn이 주어진다 (1≤n≤10001 \le n \le 1000). 다음 nn개의 줄에 행렬 dd가 주어진다 (0≤di,j≤1090 \le d_{i,j} \le 10^9). 행렬의 모든 수는 정수이다.

출력

dd와 같은 행렬을 만드는 xx, aa, bb가 존재하면 첫 줄에 <<YES>>를 출력한다. 둘째 줄에는 비내림차순 정수 배열 xx (∣xi∣≤109|x_i| \le 10^9; xi≤xi+1x_i \le x_{i+1})를 출력한다. 셋째 줄에는 11부터 nn까지의 수로 이루어진 순열 aa를, 넷째 줄에는 순열 bb를 출력한다.

존재하지 않으면 <<NO>>를 출력한다.

힌트

입력 데이터가 클 수 있으므로 사용하는 언어의 빠른 입출력 스트림을 쓰는 것을 권장한다.

예제3

  1. 예제 1

    입력
    4
    3 2 1 0
    2 1 0 1
    1 0 1 2
    0 1 2 3
    
    예상 출력
    YES
    0 1 2 3
    1 2 3 4
    4 3 2 1
    
  2. 예제 2

    입력
    3
    1 0 2
    1 1 1
    1 1 0
    
    예상 출력
    NO
    
  3. 예제 3

    입력
    4
    7 0 2 1
    9 2 0 3
    0 7 9 6
    6 1 3 0
    
    예상 출력
    YES
    0 2 3 9
    2 1 4 3
    4 2 1 3