병원
시간 제한2초메모리 제한128 MB
특수 간호사의 대체자 목록이 주어질 때, 절대 휴가를 갈 수 없는 간호사와 각각은 가능하지만 동시에는 불가능한 쌍을 모두 구한다.
문제
대형 병원의 휴가 관리 시스템을 만들려고 한다. 이 병원의 간호사는 두 종류로 나뉜다.
- 일반 간호사는 입원 환자를 돌보는 간호사로, 휴가를 가더라도 다른 간호사가 업무를 대신 맡을 수 있어 문제가 되지 않는다.
- 특수 간호사는 "수술 간호사", "간호부장"처럼 특별히 맡은 자리가 있는 간호사로, 반드시 자신을 대신할 대체자가 있어야만 휴가를 갈 수 있다.
모든 특수 간호사는 자신을 대체할 수 있는 간호사의 목록을 가지고 있다. 특수 간호사가 휴가를 가면 그 목록에 있는 간호사 중 한 명이 자리를 넘겨받는다. 그런데 자리를 넘겨받은 간호사가 또 다른 특수 간호사라면, 그 간호사가 원래 맡던 자리도 다시 누군가로 대체되어야 한다. 이렇게 대체가 연쇄적으로 이어져 마지막에 일반 간호사가 자리를 메우면 휴가가 성립한다. 한 간호사는 한 번에 한 자리만 대신할 수 있고, 휴가 중인 간호사는 다른 자리를 대신할 수 없다. 대체 사슬을 만들 수 없으면 그 특수 간호사는 휴가를 갈 수 없다.
예를 들어 간호사가 명 있고 ~번이 특수 간호사, ~번이 일반 간호사라고 하자. 각 특수 간호사를 대체할 수 있는 간호사가 다음과 같다고 하자. 번은 번 또는 번, 번은 번, 번은 번 또는 번, 번은 번, 번은 번. 이때 번과 번은 서로만 대체할 수 있어서, 한 명이 휴가를 가면 남은 한 명이 두 자리를 동시에 맡을 수 없으므로 둘 다 절대 휴가를 갈 수 없다. , , 번은 각자 휴가를 갈 수 있다. 다만 번과 번은 결국 모두 번 간호사에게 의존하는데 번은 두 자리를 한꺼번에 대신할 수 없으므로, 번과 번은 동시에 휴가를 갈 수 없다.
간호사들의 대체 정보가 주어졌을 때, 절대로 휴가를 갈 수 없는 간호사와, 각자 휴가를 갈 수는 있지만 서로 동시에는 갈 수 없는 간호사 쌍을 모두 구하는 프로그램을 작성하시오.
입력
첫째 줄에 전체 간호사 수 과 특수 간호사 수 가 주어진다. 번부터 번까지가 특수 간호사, 번부터 번까지가 일반 간호사이다. ()
이어지는 개의 줄 중 번째 줄에는 번 특수 간호사를 대체할 수 있는 간호사의 정보가 주어진다. 줄의 첫 번째 수는 대체 가능한 간호사의 수 이고, 이어서 개의 간호사 번호가 주어진다. 모든 목록 길이의 합은 을 넘지 않는다.
출력
첫째 줄에 절대로 휴가를 갈 수 없는 간호사의 수를 출력한다. 둘째 줄에는 그 간호사들의 번호를 오름차순으로 공백으로 구분해 출력한다(해당하는 간호사가 없으면 빈 줄을 출력한다).
셋째 줄에는 각자 휴가를 갈 수는 있지만 서로 동시에는 휴가를 갈 수 없는 간호사 쌍의 수를 출력한다. 쌍 와 는 같은 쌍으로 센다. 그 수가 이하이면, 다음 줄부터 한 줄에 한 쌍씩 두 간호사의 번호를 순서로 출력하되, 쌍은 앞 번호 우선, 그다음 뒤 번호 순의 오름차순으로 정렬해 출력한다.