커널 스케줄러
시간 제한2초메모리 제한1024 MB
작업 n개와 의존 관계 m개가 주어졌을 때, 사이클이 생기지 않도록 의존 관계를 m/2개 이상 골라 번호를 출력합니다.
문제
새로운 운영체제의 스케줄링 모듈을 개발하고 있다고 하자. 이 모듈은 실행할 작업 개와 작업 사이의 의존 관계를 입력받아 실행 순서를 정한다.
더 정확히 말하면, 작업에는 1부터 까지 번호가 매겨져 있다. 의존 관계는 개 주어지며, 번째 의존 관계는 두 수 , 로 표현된다. 이는 작업 를 작업 보다 먼저 실행해야 한다는 뜻이다.
순환 의존이 생기는 경우도 있다. 작업 이 보다 먼저, 가 보다 먼저, ..., 이 보다 먼저, 그리고 가 보다 먼저 실행되어야 하는 상황이다. 순환 의존은 스케줄링을 불가능하게 만드므로, 남은 의존 관계에 순환이 없도록 주어진 의존 관계 일부를 제거해야 한다.
다만 원래 정보를 일부 보존하려면 원래 의존 관계를 최소 개는 남겨야 한다. 이 작업을 수행하는 프로그램을 작성하라.
입력
첫 줄에 과 이 주어진다 (, ). 이어지는 개의 줄에는 각각 의존 관계를 나타내는 두 수 , 가 주어진다 (, ).
출력
조건을 만족하는 의존 관계의 부분집합이 존재하면 첫 줄에 YES, 없으면 NO를 출력한다. YES인 경우 둘째 줄에 선택한 의존 관계의 개수 를 출력하고(는 이상이어야 한다), 셋째 줄에 선택한 의존 관계의 번호 개를 출력한다. 번호는 입력 순서대로 1부터 까지 매겨져 있다.