만드는 중입니다

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

명제 증명

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

요약
N개의 명제가 서로를 함의하도록 방향 간선을 골라, 선택한 증명 난이도의 최댓값과 최솟값 차이를 최소로 만든다.
난이도

보통10점 중 7점

유형
그래프, 투 포인터, 유니온 파인드, 최소 신장 트리
정답자
아직 제출이 없습니다

문제

영선이는 미적분학 시험을 준비하면서 명제 NN개가 모두 동치임을 증명하려고 한다. 명제에는 0번부터 N−1N-1번까지 번호가 붙어 있다.

서로 다른 두 명제 xx와 yy에 대해 영선이는 "xx이면 yy이다"를 증명할 수 있고, 증명마다 난이도가 정해져 있다. "xx이면 yy이다"의 난이도와 "yy이면 xx이다"의 난이도는 서로 다를 수 있다.

영선이가 오늘 할 일은 증명을 몇 개 골라서 임의의 두 명제가 직접 또는 다른 명제를 거쳐 서로를 함축하게 만드는 것이다. 예를 들어 N=3N = 3이면 0 => 1, 1 => 0, 0 => 2, 2 => 0을 증명하는 방법이 있고, 0 => 1, 1 => 2, 2 => 0을 증명하는 방법도 있다.

이렇게 고른 증명 중에서 가장 어려운 난이도와 가장 쉬운 난이도의 차이를 최소로 만들려고 한다. 그 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 명제의 개수 NN (1≤N≤501 \le N \le 50)이 주어진다.

다음 NN개의 줄에는 증명의 난이도가 한 줄에 NN개씩 주어진다. ii번째 줄의 jj번째 정수는 ii => jj를 증명하는 난이도이다. 번호는 0번부터 센다.

난이도는 0 이상 150,000 이하의 정수이고, ii번째 줄의 ii번째 정수는 항상 0이다.

출력

모든 명제가 서로를 함축하도록 증명을 골랐을 때, 고른 증명 중 가장 어려운 난이도와 가장 쉬운 난이도의 차이가 가장 작은 경우의 그 차이를 첫째 줄에 출력한다.

N=1N = 1이면 증명을 하나도 고르지 않아도 되므로 0을 출력한다.

예제3

  1. 예제 1

    입력
    4
    0 11 13 13
    10 0 12 13
    10 10 0 11
    12 10 10 0
    
    예상 출력
    1
    
  2. 예제 2

    입력
    5
    0 1000 1000 1000 1000
    1 0 1000 1000 1000
    1 1 0 1000 1000
    1 1 1 0 1000
    1 1 1 1 0
    
    예상 출력
    999
    
  3. 예제 3

    입력
    4
    0 136946 89305 28946 
    40152 0 150000 85407 
    122920 110420 0 32811 
    2092 79717 53028 0
    
    예상 출력
    50771