확장 노선 건설 순서

시간 제한1초메모리 제한128 MB

요약
역 1로 시작하는 네트워크와 각 노선의 역 집합이 주어질 때, 건설 시점에 네트워크와 맞닿도록 모든 노선을 짓는 사전순 최소 순서를 출력하거나 Impossible을 출력한다.
난이도

보통10점 중 6점

유형
그래프, 그리디, 정렬, 구현
정답자
아직 제출이 없습니다

문제

노선을 추가할 집합을 정한 뒤에는, 이 확장 노선들을 어떤 순서로 건설할지가 중요한 문제가 됩니다. 새 노선은 건설되는 시점에 이미 기존 네트워크와 맞닿아 있어야만 쓸모가 있습니다. 예를 들어 아직 나머지 네트워크와 연결되지 않은 역까지 노선을 연장하는 것은 의미가 없습니다.

현재 네트워크는 하나의 시작점(역 11, 기존 네트워크 전체를 대표함)으로 주어지며, 여기에 제안된 모든 확장 노선이 함께 주어집니다. 각 확장 노선은 그 노선이 연결하게 될 역들의 집합으로 표현됩니다. 어떤 노선은 그 역들 중 적어도 하나가 이미 네트워크에 속해 있을 때에만 건설할 수 있으며, 일단 건설되면 그 노선의 모든 역이 네트워크의 일부가 됩니다.

모든 노선이 건설되는 시점에 네트워크와 연결되도록 하는 건설 순서를 구하거나, 그러한 순서가 존재하지 않음을 판별하세요.

입력

첫 줄에는 데이터 집합의 개수 KK가 주어집니다. 각 데이터 집합은 다음과 같은 형식입니다.

  • 첫 줄에 두 정수 nn과 mm이 주어집니다 (1≤n≤5001 \le n \le 500, 1≤m≤501 \le m \le 50). nn은 전체 역의 수이며, 역 11은 현재 네트워크 전체를 나타냅니다. mm은 제안된 새 노선의 수입니다.
  • 이어서 mm개의 줄이 주어지며, 각 줄은 하나의 노선을 설명합니다. ii번째 줄에는 노선 ii가 연결하는 역들의 집합 Si⊆{1,…,n}S_i \subseteq \{1, \dots, n\}에 속한 역 번호들이 공백으로 구분되어 주어집니다.

출력

각 데이터 집합에 대해, 먼저 Data Set x: 형식의 한 줄을 출력합니다. 여기서 xx는 그 데이터 집합의 번호이며 11부터 시작합니다.

그다음 노선을 건설해야 하는 순서대로, 한 줄에 노선 번호 하나씩 출력합니다(노선은 입력에 나타난 순서대로 11부터 mm까지 번호가 매겨집니다). 각 노선은 건설되는 시점에 네트워크와 연결되어 있어야 합니다.

가능한 순서가 여러 개라면 사전순으로 가장 앞서는 것을 출력합니다. 두 순서를 서로 다른 첫 위치에서 비교하여, 그 위치의 노선 번호가 더 작은 순서를 앞에 둡니다.

가능한 순서가 존재하지 않으면 순서 대신 Impossible을 출력합니다.

서로 이웃한 데이터 집합 사이는 빈 줄로 구분합니다.

예제3

  1. 예제 1

    입력
    2
    6 2
    1 2 3
    4 6 5
    8 4
    4 2
    5 4 6 3
    1 5 3 7
    7 6 8
    
    예상 출력
    Data Set 1:
    Impossible
    
    Data Set 2:
    3
    2
    1
    4
    
  2. 예제 2

    입력
    1
    3 1
    1 2 3
    
    예상 출력
    Data Set 1:
    1
    
  3. 예제 3

    입력
    1
    3 1
    2 3
    
    예상 출력
    Data Set 1:
    Impossible