아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

병원

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

요약
특수 간호사의 대체자 목록이 주어질 때, 절대 휴가를 갈 수 없는 간호사와 각각은 가능하지만 동시에는 불가능한 쌍을 모두 구한다.
난이도

보통10점 중 7점

유형
그래프, DFS, BFS, 조합론
정답자
아직 제출이 없습니다

문제

대형 병원의 휴가 관리 시스템을 만들려고 한다. 이 병원의 간호사는 두 종류로 나뉜다.

  • 일반 간호사는 입원 환자를 돌보는 간호사로, 휴가를 가더라도 다른 간호사가 업무를 대신 맡을 수 있어 문제가 되지 않는다.
  • 특수 간호사는 "수술 간호사", "간호부장"처럼 특별히 맡은 자리가 있는 간호사로, 반드시 자신을 대신할 대체자가 있어야만 휴가를 갈 수 있다.

모든 특수 간호사는 자신을 대체할 수 있는 간호사의 목록을 가지고 있다. 특수 간호사가 휴가를 가면 그 목록에 있는 간호사 중 한 명이 자리를 넘겨받는다. 그런데 자리를 넘겨받은 간호사가 또 다른 특수 간호사라면, 그 간호사가 원래 맡던 자리도 다시 누군가로 대체되어야 한다. 이렇게 대체가 연쇄적으로 이어져 마지막에 일반 간호사가 자리를 메우면 휴가가 성립한다. 한 간호사는 한 번에 한 자리만 대신할 수 있고, 휴가 중인 간호사는 다른 자리를 대신할 수 없다. 대체 사슬을 만들 수 없으면 그 특수 간호사는 휴가를 갈 수 없다.

예를 들어 간호사가 77명 있고 11~55번이 특수 간호사, 66~77번이 일반 간호사라고 하자. 각 특수 간호사를 대체할 수 있는 간호사가 다음과 같다고 하자. 11번은 66번 또는 77번, 22번은 77번, 33번은 22번 또는 77번, 44번은 55번, 55번은 44번. 이때 44번과 55번은 서로만 대체할 수 있어서, 한 명이 휴가를 가면 남은 한 명이 두 자리를 동시에 맡을 수 없으므로 둘 다 절대 휴가를 갈 수 없다. 11, 22, 33번은 각자 휴가를 갈 수 있다. 다만 22번과 33번은 결국 모두 77번 간호사에게 의존하는데 77번은 두 자리를 한꺼번에 대신할 수 없으므로, 22번과 33번은 동시에 휴가를 갈 수 없다.

간호사들의 대체 정보가 주어졌을 때, 절대로 휴가를 갈 수 없는 간호사와, 각자 휴가를 갈 수는 있지만 서로 동시에는 갈 수 없는 간호사 쌍을 모두 구하는 프로그램을 작성하시오.

입력

첫째 줄에 전체 간호사 수 nn과 특수 간호사 수 kk가 주어진다. 11번부터 kk번까지가 특수 간호사, k+1k+1번부터 nn번까지가 일반 간호사이다. (1≤k<n≤10001 \le k < n \le 1000)

이어지는 kk개의 줄 중 ii번째 줄에는 ii번 특수 간호사를 대체할 수 있는 간호사의 정보가 주어진다. 줄의 첫 번째 수는 대체 가능한 간호사의 수 did_i이고, 이어서 did_i개의 간호사 번호가 주어진다. 모든 목록 길이의 합은 10 00010\,000을 넘지 않는다.

출력

첫째 줄에 절대로 휴가를 갈 수 없는 간호사의 수를 출력한다. 둘째 줄에는 그 간호사들의 번호를 오름차순으로 공백으로 구분해 출력한다(해당하는 간호사가 없으면 빈 줄을 출력한다).

셋째 줄에는 각자 휴가를 갈 수는 있지만 서로 동시에는 휴가를 갈 수 없는 간호사 쌍의 수를 출력한다. 쌍 (A,B)(A, B)와 (B,A)(B, A)는 같은 쌍으로 센다. 그 수가 10 00010\,000 이하이면, 다음 줄부터 한 줄에 한 쌍씩 두 간호사의 번호를 A<BA < B 순서로 출력하되, 쌍은 앞 번호 우선, 그다음 뒤 번호 순의 오름차순으로 정렬해 출력한다.

예제2

  1. 예제 1

    입력
    7 5
    2 6 7
    1 7
    2 2 7
    1 5
    1 4
    
    예상 출력
    2
    4 5
    3
    2 3
    2 7
    3 7
    
  2. 예제 2

    입력
    2 1
    1 2
    
    예상 출력
    0
    
    1
    1 2