최종 순위

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

요약
작년 순위와 순서가 바뀐 팀 쌍들이 주어졌을 때 올해 순위를 유일하게 복원하거나 모호하거나 불가능함을 판별합니다.
난이도

어려움10점 중 8점

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

문제

올해 어떤 프로그래밍 대회의 온라인 예선에 총 nn개의 팀이 참가했다. 팀에는 11번부터 nn번까지 번호가 붙어 있다. 놀랍게도 올해 참가한 팀들은 작년에 참가했던 팀들과 완전히 같다.

올해 예선 본부는 최종 순위를 공개하지 않기로 했다. 대신 작년과 비교했을 때 상대적인 순위가 뒤바뀐 팀들의 쌍만 발표한다. (작년에는 순위가 공개되었다.) 예를 들어 작년에는 팀 1313이 팀 66보다 순위가 높았는데 올해는 팀 66이 팀 1313보다 순위가 높다면, 쌍 (6,13)(6, 13)이 발표된다.

이 정보만으로 올해 최종 순위를 복원하려고 한다. 작년 순위와 상대적인 순위가 바뀐 모든 팀 쌍의 목록이 주어졌을 때, 올해 순위를 계산하는 프로그램을 작성하여라. 단, 발표된 정보만으로는 올해 순위를 유일하게 확정할 수 없는 경우가 있을 수 있고, 정보 자체에 모순이 있어 어떤 순위로도 설명할 수 없는 경우도 있을 수 있다. 이 두 경우도 모두 판별해야 한다.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 테스트 케이스의 개수는 100100개를 넘지 않는다. 각 테스트 케이스는 다음과 같이 구성된다.

  • 팀의 수 nn이 주어지는 한 줄. (2≤n≤5002 \le n \le 500)
  • nn개의 정수 t1,t2,…,tnt_1, t_2, \dots, t_n이 주어지는 한 줄. (1≤ti≤n1 \le t_i \le n) tit_i는 작년에 ii등을 한 팀의 번호이며, 11등이 가장 성적이 좋은 팀이다. 모든 tit_i는 서로 다르다.
  • 상대적인 순위가 바뀐 쌍의 수 mm이 주어지는 한 줄. (0≤m≤25 0000 \le m \le 25\,000)
  • 상대적인 순위가 바뀐 두 팀의 번호 aia_i와 bib_i가 주어지는 mm개의 줄. (1≤ai<bi≤n1 \le a_i < b_i \le n) 같은 쌍이 두 번 이상 발표되는 경우는 없다.

출력

각 테스트 케이스마다 다음을 출력한다.

  • 올해 순위를 나타내는 nn개의 정수를, 11등 팀부터 순서대로 한 줄에 공백으로 구분하여 출력한다. 발표된 정보만으로 순위를 유일하게 확정할 수 없다면 대신 ?를 출력한다. 정보에 모순이 있어 어떤 순위도 정할 수 없다면 대신 IMPOSSIBLE을 출력한다.

예제3

  1. 예제 1

    입력
    3
    5
    5 4 3 2 1
    2
    2 4
    3 4
    3
    2 3 1
    0
    4
    1 2 3 4
    3
    1 2
    3 4
    2 3
    
    예상 출력
    5 3 2 4 1
    2 3 1
    IMPOSSIBLE
    
  2. 예제 2

    입력
    1
    4
    4 3 2 1
    0
    
    예상 출력
    4 3 2 1
    
  3. 예제 3

    입력
    1
    2
    1 2
    1
    1 2
    
    예상 출력
    2 1