줄서기
시간 제한2초메모리 제한512 MB
줄에 선 학생들 사이의 비교 쌍이 주어질 때, 모든 쌍과 맞는 카드 순열을 복원하고, 불가능하면 -1을 출력한다.
문제
명의 학생이 앞뒤로 한 줄로 서 있다. 각 학생은 부터 까지 서로 다른 번호가 적힌 카드를 한 장씩 가지고 있다. 모든 학생에게서 자기보다 뒤에 서 있으면서 자기보다 작은 번호의 카드를 가진 학생의 명단을 하나도 빠짐없이 받았다. 이 명단으로 학생들이 가진 카드 번호를 알아내려고 한다.
앞에서부터 차례로 학생1, 학생2, 학생3, 학생4, 학생5가 서 있다고 하자. 순서쌍 는 학생Y가 학생X보다 뒤에 서 있으면서 더 작은 번호의 카드를 가진다는 뜻이다. 받은 명단에서 순서쌍 , , , , 가 만들어졌다면, 학생1부터 학생5까지는 각각 3, 1, 5, 4, 2가 적힌 카드를 가진다.
같은 5명에게서 순서쌍 , , , , , 가 만들어졌다면 명단이 잘못된 것이다. 순서쌍 에 따르면 학생2의 카드가 학생5의 카드보다 번호가 크다. 이때 학생4의 카드가 학생5의 카드보다 번호가 작다면 순서쌍 가 있어야 하고, 반대로 더 크다면 순서쌍 가 있어야 한다. 둘 다 없으므로 이 명단은 성립하지 않는다.
명단으로 만들어진 순서쌍을 입력받아 각 학생이 가진 카드 번호를 알아내는 프로그램을 작성하라.
입력
첫째 줄에 학생 수 ()과 순서쌍의 수 ()이 공백으로 구분되어 주어진다. 줄의 앞에서부터 차례로 학생1, 학생2, ..., 학생이라고 하자. 다음 개 줄에는 각각 두 자연수 와 가 공백으로 구분되어 주어진다 (). 이는 학생Y가 학생X보다 작은 번호의 카드를 가진다는 순서쌍이다. 같은 순서쌍이 두 번 주어지지는 않는다.
출력
주어진 순서쌍으로 학생들이 가진 카드 번호를 알 수 있으면, 학생이 서 있는 순서대로 카드 번호를 공백으로 구분해 한 줄에 출력한다. 알 수 없으면 -1을 출력한다.