기술 개발 계획

목표 기술과 이에 필요한 선행 기술을 모두 모아 사전 순으로 가장 앞선 연구 순서와 개수를 출력합니다.

보통5위상 정렬그래프면접 대비아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

문명 시뮬레이션 게임에서 문명은 여러 기술을 개발한다. 어떤 기술은 다른 기술에 의존한다. 기술 A가 기술 B에 의존하면, B를 개발한 뒤에야 A를 개발할 수 있다. 문명은 한 번에 기술 하나만 개발한다.

게임에는 특정 기술을 요구하는 목표가 있다. 목표 기술이 주어졌을 때, 개발해야 하는 기술의 최소 개수와 그 개발 순서를 구한다.

입력

첫 줄에 테스트 케이스 개수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어지고, 각 테스트 케이스는 다음과 같다.

  • 첫 줄에 의존 관계 개수 MM.
  • 다음 MM개 줄에 각각 콜론(:)으로 구분된 기술 이름 두 개. 앞의 기술이 뒤의 기술에 의존한다.
  • 다음 줄에 목표 기술 개수 QQ.
  • 다음 QQ개 줄에 각각 목표 기술 이름 하나.

기술 이름은 영문자와 숫자로만 이루어지며 대소문자를 구분한다.

제한

  • 1T251 \le T \le 25
  • 1M101 \le M \le 10
  • 1Q101 \le Q \le 10
  • 의존 관계 그래프에 사이클은 없다.
  • 같은 의존 관계나 같은 목표 기술이 두 번 이상 주어질 수 있다.
  • 의존 관계에 한 번도 등장하지 않는 기술이 목표로 주어질 수 있다.

출력

각 테스트 케이스마다 먼저 Case #C: D 형식의 줄을 출력한다. 여기서 CC는 1부터 시작하는 테스트 케이스 번호이고, DD는 개발해야 하는 기술의 최소 개수다. 이어지는 DD개 줄에 개발해야 하는 기술을 개발 순서대로 한 줄에 하나씩 출력한다.

조건을 만족하는 순서가 여러 개면 사전순으로 가장 앞서는 순서 하나만 출력한다. 순서 두 개를 비교할 때는 기술 이름이 처음으로 달라지는 자리를 찾아 그 자리의 이름을 비교하고, 이름은 유니코드 코드 포인트 순서로 비교한다. 따라서 숫자가 대문자보다 앞서고, 대문자가 소문자보다 앞선다.