만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

기술 개발 계획

면접 대비

시간 제한5초메모리 제한512 MB

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

보통10점 중 5점

유형
위상 정렬, 그래프
정답자
아직 제출이 없습니다

문제

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

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

입력

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

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

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

제한

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

출력

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

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

예제2

  1. 예제 1

    입력
    4
    9
    Metalworking:Fire
    Pottery:Fire
    Iron:Metalworking
    Steel:Iron
    Battleships:Steel
    Alchemy:Fire
    Chemistry:Alchemy
    Explosives:Chemistry
    Battleships:Explosives
    1
    Battleships
    9
    Metalworking:Fire
    Pottery:Fire
    Iron:Metalworking
    Steel:Iron
    Battleships:Steel
    Alchemy:Fire
    Chemistry:Alchemy
    Explosives:Chemistry
    Battleships:Explosives
    2
    Metalworking
    Pottery
    2
    b:a
    c:b
    1
    d
    1
    A:a
    1
    A
    
    예상 출력
    Case #1: 8
    Fire
    Alchemy
    Chemistry
    Explosives
    Metalworking
    Iron
    Steel
    Battleships
    Case #2: 3
    Fire
    Metalworking
    Pottery
    Case #3: 1
    d
    Case #4: 2
    a
    A
    
  2. 예제 2

    입력
    1
    4
    b:a
    c:b
    d:c
    e:d
    1
    e
    
    예상 출력
    Case #1: 5
    a
    b
    c
    d
    e