상자 안에 든 열쇠로 N개 상자를 모두 여는 가장 작은 사전식 순서를 찾고 불가능하면 IMPOSSIBLE을 출력합니다.
보통6백트래킹DFS그래프그리디아직 제출이 없습니다시간 제한5초메모리 제한512 MB낡은 지도를 따라가다 해적 래리의 비밀 보물 창고를 찾아냈다.
창고에는 잠긴 상자가 N개 있고, 각 상자는 정해진 종류의 열쇠 하나로만 열린다. 상자를 여는 데 쓴 열쇠는 사라져서 다시 쓸 수 없다. 상자 안에는 보물이 들어 있고, 다른 상자를 여는 열쇠가 함께 들어 있을 수도 있다. 한 상자에 같은 종류의 열쇠가 여러 개 들어 있어도 되고, 열쇠는 몇 개든 들고 다닐 수 있다.
처음에 열쇠를 적어도 하나 가지고 있고, 어느 상자에 어떤 열쇠가 들어 있는지는 지도에 적혀 있다. 이 정보로 상자를 모두 여는 순서를 찾아라.
예를 들어 상자가 아래와 같이 네 개 있고, 처음에 1번 종류 열쇠 하나만 가지고 있다고 하자.
| 상자 번호 | 상자를 여는 열쇠 종류 | 상자 안의 열쇠 종류 |
|---|---|---|
| 1 | 1 | 없음 |
| 2 | 1 | 1, 3 |
| 3 | 2 | 없음 |
| 4 | 3 | 2 |
이때 2, 1, 4, 3 순서로 열면 네 상자를 모두 열 수 있다. 1번 상자를 먼저 열면 하나뿐인 열쇠를 써버려서 더는 어떤 상자도 열지 못한다.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 이어서 T개의 테스트 케이스가 주어진다.
각 테스트 케이스의 첫째 줄에는 양의 정수 K와 N이 주어진다. K는 처음에 가진 열쇠의 개수이고 N은 열어야 하는 상자의 개수다.
다음 줄에는 처음에 가진 열쇠의 종류를 나타내는 정수 K개가 주어진다.
그다음 N개의 줄에는 상자 하나의 정보가 한 줄씩 주어진다. i번째 줄은 정수 Ti와 Ki로 시작한다. Ti는 i번 상자를 여는 데 필요한 열쇠의 종류이고 Ki는 그 상자 안에 든 열쇠의 개수다. 이어서 그 상자 안에 든 열쇠의 종류를 나타내는 정수 Ki개가 주어진다.
제한
각 테스트 케이스마다 Case #x: C1 C2 ... CN 형식으로 한 줄씩 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고 Ci는 i번째로 여는 상자의 번호다. 상자 번호는 1부터 시작한다.
상자를 모두 여는 순서가 여러 개면 사전순으로 가장 앞서는 순서를 출력한다. 즉 C1을 가능한 한 작게 하고, 그런 순서가 여러 개면 C2를 가능한 한 작게 하고, 이후 자리도 같은 방식으로 정한다.
상자를 모두 여는 순서가 없으면 그 테스트 케이스에는 Case #x: IMPOSSIBLE을 출력한다.