알파벳 크기를 모르는 상태에서 각 위치 이후 기호의 다음 등장 위치를 담은 표의 남은 값을 뒤섞인 채로 입력받아, 표를 만족하는 사전순 최소 원래 수열을 복원하거나 불가능함을 판정한다.
어려움9그리디그래프구현정렬아직 제출이 없습니다시간 제한2초메모리 제한512 MBTupids 교수가 최근 조사에서 고고학 문서를 새로 발굴했다.
이 문서는 c가지 기호를 n개 늘어놓아 적은 글이다. 교수는 뜻을 연구하려고 각 기호에 1부터 c까지의 자연수를 하나씩 붙였다. 그래서 이 문서는 1 이상 c 이하의 자연수 n개로 이루어진 수열로 적을 수 있다.
교수는 기호 사이의 관계를 살피려고 행이 n개, 열이 c개인 큰 표를 만들었다. 표의 i행 j열에 적은 값은 수열에서 i번째보다 뒤에 처음으로 나오는 기호 j의 위치이다. 그런 위치가 없으면 그 칸에는 0을 적는다.
예를 들어 n=6, c=3이고 수열이 [1,3,2,2,1,3]이면 표의 값 몇 개는 다음과 같다.
어느 날 연구실에 불이 나서 문서가 모두 타 버렸다. 표는 완전히 없어지지는 않았지만 피해를 입었다. c가 얼마였는지 적어 둔 기록이 사라졌고, 표의 일부 칸은 글씨를 알아볼 수 없게 되었으며, 조교가 잘못 보관한 탓에 각 행에 적힌 숫자의 순서까지 뒤섞였다.
교수는 남은 정보로 원래 문서를 복구하려 한다. 조건에 맞는 수열이 무한히 많을 수 있으므로 교수는 사전순으로 가장 앞서는 수열을 원한다. 다만 표의 내용이 잘못되었다면 조건에 맞는 수열이 아예 없을 수도 있다. 그때는 그 슬픈 소식을 교수에게 알려 주면 된다.
피해를 입은 표를 입력으로 받아 원래 수열을 복구하는 프로그램을 작성하라.
첫째 줄에 원래 수열의 길이 n (1≤n≤300000)이 주어진다.
다음 n개의 줄 가운데 i번째 줄에는 정수 ci (0≤ci≤n−i)와 자연수 ci개가 주어진다. 이 ci개의 수는 표의 i행에서 아직 읽을 수 있는 숫자이고, 모두 n 이하이며 서로 다르다. 적힌 순서는 원래 표의 순서와 다를 수 있다.
모든 ci의 합은 300000을 넘지 않는다.
조건을 만족하는 수열이 있으면 그 수열의 원소 n개를 공백으로 구분해 한 줄에 출력한다. 조건을 만족하는 수열이 여러 개이면 사전순으로 가장 앞서는 것을 출력한다.
조건을 만족하는 수열이 없으면 "No Solution"을 출력한다.