줄서기

줄에 선 학생들 사이의 비교 쌍이 주어질 때, 모든 쌍과 맞는 카드 순열을 복원하고, 불가능하면 -1을 출력한다.

어려움8위상 정렬정렬그래프그리디아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

NN명의 학생이 앞뒤로 한 줄로 서 있다. 각 학생은 11부터 NN까지 서로 다른 번호가 적힌 카드를 한 장씩 가지고 있다. 모든 학생에게서 자기보다 뒤에 서 있으면서 자기보다 작은 번호의 카드를 가진 학생의 명단을 하나도 빠짐없이 받았다. 이 명단으로 학생들이 가진 카드 번호를 알아내려고 한다.

앞에서부터 차례로 학생1, 학생2, 학생3, 학생4, 학생5가 서 있다고 하자. 순서쌍 (X,Y)(X, Y)는 학생Y가 학생X보다 뒤에 서 있으면서 더 작은 번호의 카드를 가진다는 뜻이다. 받은 명단에서 순서쌍 (1,2)(1, 2), (1,5)(1, 5), (3,4)(3, 4), (3,5)(3, 5), (4,5)(4, 5)가 만들어졌다면, 학생1부터 학생5까지는 각각 3, 1, 5, 4, 2가 적힌 카드를 가진다.

같은 5명에게서 순서쌍 (1,2)(1, 2), (1,3)(1, 3), (1,5)(1, 5), (2,5)(2, 5), (3,4)(3, 4), (3,5)(3, 5)가 만들어졌다면 명단이 잘못된 것이다. 순서쌍 (2,5)(2, 5)에 따르면 학생2의 카드가 학생5의 카드보다 번호가 크다. 이때 학생4의 카드가 학생5의 카드보다 번호가 작다면 순서쌍 (2,4)(2, 4)가 있어야 하고, 반대로 더 크다면 순서쌍 (4,5)(4, 5)가 있어야 한다. 둘 다 없으므로 이 명단은 성립하지 않는다.

명단으로 만들어진 순서쌍을 입력받아 각 학생이 가진 카드 번호를 알아내는 프로그램을 작성하라.

입력

첫째 줄에 학생 수 NN (1N100,0001 \le N \le 100{,}000)과 순서쌍의 수 MM (0M1,000,0000 \le M \le 1{,}000{,}000)이 공백으로 구분되어 주어진다. 줄의 앞에서부터 차례로 학생1, 학생2, ..., 학생NN이라고 하자. 다음 MM개 줄에는 각각 두 자연수 XXYY가 공백으로 구분되어 주어진다 (1X<YN1 \le X < Y \le N). 이는 학생Y가 학생X보다 작은 번호의 카드를 가진다는 순서쌍이다. 같은 순서쌍이 두 번 주어지지는 않는다.

출력

주어진 순서쌍으로 학생들이 가진 카드 번호를 알 수 있으면, 학생이 서 있는 순서대로 카드 번호를 공백으로 구분해 한 줄에 출력한다. 알 수 없으면 -1을 출력한다.