다른 상자에서 얻은 일회용 열쇠로 모든 상자를 여는 사전순으로 가장 작은 순서를 찾고 불가능하면 IMPOSSIBLE을 출력합니다.
보통7그리디그래프백트래킹아직 제출이 없습니다시간 제한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번째 줄은 i번 상자를 설명한다. 각 줄은 정수 ti와 mi로 시작한다. ti는 그 상자를 여는 데 필요한 열쇠의 종류, mi는 그 상자 안에 든 열쇠의 개수다. 그 뒤에 상자 안에 든 열쇠의 종류를 나타내는 정수 mi개가 이어진다.
제한은 다음과 같다.
각 테스트 케이스마다 한 줄에 Case #x: C1 C2 ... CN 형식으로 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, Ci는 i번째로 여는 상자의 번호다. 상자 번호는 1부터 시작한다.
상자를 모두 여는 순서가 여러 가지면 사전순으로 가장 앞서는 것을 출력한다. 즉 C1을 가능한 한 작게 하고, 그런 순서가 여럿이면 그중에서 C2를 가능한 한 작게 하는 식으로 정한다.
상자를 모두 여는 순서가 없으면 그 줄에 Case #x: IMPOSSIBLE을 출력한다.