만드는 중입니다

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

기술 개발 순서

면접 대비

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

요약
모든 목표 기술과 선행 기술을 포함한 최소 집합을 구하고 사전식으로 가장 작은 연구 순서를 출력합니다.
난이도

보통10점 중 5점

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

문제

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

게임에는 특정 기술을 요구하는 목표가 있다. 목표 기술을 모두 얻으려면 어떤 기술을 어떤 순서로 개발해야 하는지 정하는 프로그램을 작성한다.

입력

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

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

기술 이름은 영문자와 숫자로 이루어진 문자열이고 대소문자를 구별한다. 같은 의존 관계나 같은 목표 기술이 여러 번 주어지기도 한다. 어떤 의존 관계에도 나타나지 않는 기술이 목표로 주어지기도 한다.

제한

  • 1≤T≤251 \le T \le 25
  • 1≤M≤1001 \le M \le 100
  • 1≤Q≤1001 \le Q \le 100
  • 의존 관계 그래프에 사이클은 없다.

출력

각 테스트 케이스마다 먼저 "Case #CC: DD" 형식으로 한 줄을 출력한다. 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
    5
    left:root
    right:root
    top:left
    top:right
    side:root
    1
    top
    
    예상 출력
    Case #1: 4
    root
    left
    right
    top