보물 상자 열기
시간 제한5초메모리 제한512 MB
다른 상자에서 얻은 일회용 열쇠로 모든 상자를 여는 사전순으로 가장 작은 순서를 찾고 불가능하면 IMPOSSIBLE을 출력합니다.
문제
오래된 지도를 따라가다 해적 래리가 숨겨 둔 보물 창고를 찾아냈다.
보물 창고에는 잠긴 상자가 개 있고, 상자마다 정해진 종류의 열쇠로만 열린다. 열쇠는 한 번 쓰면 사라져서 다시 쓸 수 없다. 상자 안에는 보물이 들어 있고, 다른 상자를 여는 열쇠가 함께 들어 있기도 하다. 한 상자에 같은 종류의 열쇠가 여러 개 들어 있을 수도 있고, 열쇠는 몇 개든 들고 다닐 수 있다.
처음에 열쇠를 적어도 하나 가지고 있고, 어느 상자에 어떤 열쇠가 들어 있는지는 지도에 적혀 있다. 이 정보로 상자를 모두 여는 순서를 정하자.
예를 들어 상자가 네 개이고 처음에 1번 종류 열쇠를 하나만 가지고 있다고 하자.
이때 2, 1, 4, 3 순서로 열면 네 상자를 모두 열 수 있다. 1번 상자를 먼저 열면 하나뿐인 열쇠를 써 버려서 더는 아무 상자도 열지 못한다.
입력
첫째 줄에 테스트 케이스의 개수 가 주어진다. 이어서 개의 테스트 케이스가 주어진다.
각 테스트 케이스의 첫째 줄에는 양의 정수 와 이 주어진다. 는 처음에 가지고 있는 열쇠의 개수, 은 열어야 하는 상자의 개수다.
둘째 줄에는 처음에 가지고 있는 열쇠의 종류를 나타내는 정수 개가 주어진다.
이어지는 개의 줄 가운데 번째 줄은 번 상자를 설명한다. 각 줄은 정수 와 로 시작한다. 는 그 상자를 여는 데 필요한 열쇠의 종류, 는 그 상자 안에 든 열쇠의 개수다. 그 뒤에 상자 안에 든 열쇠의 종류를 나타내는 정수 개가 이어진다.
제한은 다음과 같다.
- 모든 열쇠의 종류는 이상 이하의 정수다.
- 한 테스트 케이스에 나오는 열쇠는 처음에 가진 것과 상자 안에 든 것을 합쳐 400개 이하다.
출력
각 테스트 케이스마다 한 줄에 Case #x: C1 C2 ... CN 형식으로 출력한다. 는 1부터 시작하는 테스트 케이스 번호이고, 는 번째로 여는 상자의 번호다. 상자 번호는 1부터 시작한다.
상자를 모두 여는 순서가 여러 가지면 사전순으로 가장 앞서는 것을 출력한다. 즉 을 가능한 한 작게 하고, 그런 순서가 여럿이면 그중에서 를 가능한 한 작게 하는 식으로 정한다.
상자를 모두 여는 순서가 없으면 그 줄에 Case #x: IMPOSSIBLE을 출력한다.