초록 게임
시간 제한1초메모리 제한128 MB
Ann과 Billy가 번갈아 말을 움직이는 이분 그래프에서, 처음 반복되는 필드까지의 경로에 초록 필드가 포함되도록 Ann이 강제할 수 있는 시작 필드를 모두 찾는다.
문제
초록 게임은 앤과 빌리 두 사람이 하는 게임이다. 두 사람은 개의 칸으로 이루어진 판 위에서 말 하나를 옮긴다. 칸에는 부터 까지 번호가 매겨져 있으며, 번부터 번까지는 앤의 칸, 번부터 번까지는 빌리의 칸이다. 각 칸은 흰색이거나 초록색이다.
모든 칸에는 비어 있지 않은 다음 칸 집합(그 칸에서 한 번의 이동으로 갈 수 있는 칸들)이 정해져 있다. 다음 칸들은 앤의 칸에서 이동하면 반드시 빌리의 칸으로, 빌리의 칸에서 이동하면 반드시 앤의 칸으로 가도록 배치되어 있다.
말은 처음에 정해진 시작 칸 에 놓인다. 이후 두 사람은 번갈아 말을 옮기는데, 어떤 칸에서든 그 칸의 주인이 다음 칸 하나를 골라 이동한다. 첫 이동은 시작 칸 의 주인이 한다.
게임은 말이 같은 칸에 두 번째로 도착하는 순간 끝나며, 그 칸을 라 하자. 에 처음 도착한 때부터 두 번째로 도착한 때까지 지나온 칸들을 살펴본다. 그 구간에서 말이 초록색 칸을 한 번이라도 밟았다면 앤이 이기고, 그렇지 않으면 빌리가 이긴다.
빌리가 어떻게 움직이든 앤이 항상 이길 수 있는 방법이 있다면, 앤은 그 시작 칸 에 대해 필승 전략을 가진다고 한다.
판이 주어질 때, 앤이 필승 전략을 가지는 모든 시작 칸을 구하여라.
입력
첫째 줄에 두 양의 정수 와 가 공백으로 구분되어 주어진다. 각각 앤의 칸 수와 빌리의 칸 수를 뜻하며, 이다.
다음 개의 줄에는 각 칸의 정보가 주어진다. 먼저 앤의 칸들이 순서로, 그다음 빌리의 칸들이 순서로 나온다. 번째 줄은 번 칸을 설명하며, 두 정수 와 로 시작한다. 는 칸의 색(은 흰색, 은 초록색), 는 다음 칸의 개수()이다. 그 뒤에 개의 다음 칸 번호가 이어진다. 한 줄의 모든 정수는 공백 하나로 구분된다.
초록색 칸은 최대 개이며, 모든 칸의 다음 칸 개수를 합한 값은 최대 이다.
출력
첫째 줄에 앤이 필승 전략을 가지는 칸의 개수 을 출력한다. 이어지는 개의 줄에 그 칸들의 번호를 오름차순으로 한 줄에 하나씩 출력한다.