물물교환
시간 제한1초메모리 제한128 MB
시작 아이템, 원하는 아이템, 최대 20개의 교환 거래가 주어질 때, 보유 아이템이 5개를 넘지 않으면서 원하는 아이템을 모두 얻는 최소 거래 횟수를 구한다.
문제
팀은 미래의 어느 시점에 중세 유물, 특히 그 시대 군대가 쓰던 무기와 갑옷이 매우 비싸진다는 사실을 알아냈다. 그는 중세로 시간 여행을 떠나 사슬 갑옷과 창 같은 물건을 모은 뒤, 나중에 그것들을 팔아 큰돈을 벌 계획이다.
문제는 그 시대 사람들이 받아 줄 화폐가 없다는 점이다. 따라서 필요한 물건은 모두 물물교환으로 얻어야 한다. 실제로 교환을 시작하기 전에, 팀은 각 물건을 얻는 데 필요한 교환 횟수를 미리 알고 싶어 한다. 그래야 교환이 적게 드는 물건부터 먼저 챙길 수 있기 때문이다.
타임머신은 한 번에 최대 5개의 물건만 실을 수 있으며, 팀은 교환을 마친 뒤 가진 물건이 5개를 넘게 되는 교환은 절대 하지 않는다.
입력
첫 줄에 데이터 집합의 개수 가 주어진다. 각 데이터 집합은 다음과 같은 형식이다.
첫 줄에는 네 정수 , , , 가 주어진다.
- : 팀이 하려는 교환의 최대 횟수
- : 팀이 처음에 가진 물건의 수
- : 팀이 원하는 물건의 수
- : 가능한 교환의 수
다음 줄에는 팀이 가진 물건의 이름 개가 주어진다. 그다음 줄에는 팀이 원하는 물건의 이름 개가 주어진다.
이어서 개의 교환이 각각 두 줄로 주어진다. 교환의 첫 줄에는 정수 와 팀이 내주는 개 물건의 이름이 주어지고, 둘째 줄에는 정수 와 팀이 받는 개 물건의 이름이 주어진다.
교환을 하려면 팀이 내줄 물건을 모두 지금 가지고 있어야 하며, 교환을 마친 뒤 가진 물건의 총 개수가 5개를 넘어서는 안 된다.
출력
각 데이터 집합마다 먼저 Data Set x:를 한 줄에 출력한다. 여기서 는 데이터 집합의 번호이며 1부터 시작한다. 다음 줄에는 최대 번의 교환으로 원하는 물건을 모두 얻는 데 필요한 최소 교환 횟수를 출력하고, 그것이 불가능하면 Impossible.을 출력한다. 연속한 데이터 집합 사이에는 빈 줄을 하나 넣는다.