픽업 스틱

시간 제한1초메모리 제한128 MB

요약
막대기 사이의 위에 놓인 관계가 주어질 때, 제거 순서 중 사전순으로 가장 작은 것을 출력하고 사이클이 있으면 IMPOSSIBLE을 출력한다.
난이도

보통10점 중 6점

유형
위상 정렬, 그래프, 힙, 그리디
정답자
아직 제출이 없습니다

문제

픽업 스틱(pick-up sticks)은 색색의 막대들을 탁자 위에 뒤엉킨 더미로 쏟아 놓고 하는 놀이입니다. 참가자들은 번갈아 가며 다른 막대를 건드리지 않고 한 번에 막대 하나씩을 집어 올립니다. 어떤 막대는 그 위에 다른 막대가 올려져 있으면 집어 올릴 수 없으므로, 참가자들은 다른 막대 밑에 깔린 막대를 억지로 빼내야 하는 일이 결코 생기지 않는 순서로 막대를 집으려고 합니다. 어떤 막대가 어떤 막대 위에 놓여 있는지가 주어질 때, 그러한 순서를 구하세요.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫째 줄에는 두 정수 nn과 mm이 주어지며, 둘 다 11 이상 1,000,0001{,}000{,}000 이하입니다. nn은 막대의 개수(11번부터 nn번까지 번호가 매겨짐)이고, mm은 뒤따르는 줄의 개수입니다. 그 mm개의 줄에는 각각 두 정수 aa와 bb가 주어지며, 이는 어떤 지점에서 막대 aa가 막대 bb 위에 놓여 있음을 뜻합니다. 입력의 맨 마지막 줄은 0 0이며, 이는 테스트 케이스가 아니라 종료 표시이므로 하나의 테스트 케이스로 처리해서는 안 됩니다.

출력

각 테스트 케이스에 대해, 어떤 막대도 그 위에 다른 막대가 놓인 채로 집히지 않도록 막대를 집어 올릴 수 있는 순서를 한 줄에 한 막대 번호씩 총 nn줄로 출력합니다. 그러한 순서가 여러 개일 수 있으므로, 답을 유일하게 정하기 위해 사전순으로 가장 작은 순서를 출력하세요. 즉, 두 순서를 첫 번째 막대부터 마지막 막대까지의 번호 나열로 비교하여, 처음으로 서로 달라지는 위치에서 더 작은 번호를 갖는 순서를 택합니다. 올바른 순서가 존재하지 않으면 대신 IMPOSSIBLE이라는 단어만을 한 줄에 출력하세요.

예제1

  1. 예제 1

    입력
    3 2
    1 2
    2 3
    0 0
    
    예상 출력
    1
    2
    3