치트
시간 제한10초메모리 제한256 MB
부모 간선을 조부모로 건너뛰는 치트를 최대 k개 써서 만들 수 있는 목표 완료 순서를 셉니다.
문제
코스모는 젤다의 전설 시리즈의 잘 알려지지 않은 최신작 "황혼의 시간 가면을 쓴 하늘의 바람"을 하고 있다. 이 게임에서 플레이어는 젊은 모험가 링크가 되어 목표 개를 전부 완료해야 한다. 몇몇 목표는 다른 목표보다 먼저 끝내야 한다. 목표 ()에는 선행 목표 가 하나씩 있고, 를 완료하려면 를 먼저 완료해야 한다. 1번 목표에는 선행 목표가 없다. 선행 관계에는 순환이 없다.
이 게임에는 숨겨진 치트도 있다. 목표 ()마다 치트가 하나씩 있고, 이 치트를 쓰면 를 선행 목표 보다 먼저 완료할 수 있다. 그래도 순서를 완전히 무시하지는 못한다. 목표 에 치트를 쓰면 는 다음이 아니라 의 선행 목표인 다음에만 완료하면 된다. 이면 1번 목표에 선행 목표가 없으므로 는 아무 때나 완료할 수 있다.
가까운 목표에 치트를 몰아 쓰면 게임이 예측할 수 없게 동작한다. 목표 에 치트를 쓰면 에는 치트를 쓸 수 없고, 를 선행 목표로 갖는 목표에도 치트를 쓸 수 없다. 선행 관계로 바로 이어진 두 목표에 치트를 동시에 쓸 수는 없다. 선행 목표가 같은 두 목표에는 각각 치트를 쓸 수 있다.
코스모는 치트를 최대 번 쓰면서 게임을 끝내려고 한다. 이 규칙을 지키면서 목표 개를 모두 완료하는 순서가 몇 가지인지 세어라. 서로 다른 치트 조합으로 같은 순서를 만들 수 있어도 그 순서는 한 번만 센다. 답이 매우 클 수 있으므로 로 나눈 나머지를 출력한다.
입력
입력은 테스트 케이스 여러 개로 이루어진다. 각 테스트 케이스의 첫 줄에 정수 과 가 주어진다 (, ). 은 목표의 수이고, 는 코스모가 쓸 치트 횟수의 상한이다. 다음 줄에 정수 개가 공백으로 구분되어 주어진다 (). 차례대로 목표 의 선행 목표다. 1번 목표는 선행 목표가 없어서 이 목록에서 빠진다. 이면 이 줄은 비어 있다. 입력의 마지막 줄에는 0이 두 개 주어진다.
출력
각 테스트 케이스마다 코스모가 치트를 번 이하로 쓰면서 목표 개를 모두 완료하는 순서의 수를 로 나눈 나머지로 한 줄에 하나씩 출력한다. 공백과 빈 줄은 출력하지 않는다.
힌트
첫 번째 예제에서 이고 선행 목표는 , , , 이다. 치트를 한 번도 쓰지 않는 순서가 12가지, 목표 4의 치트를 쓰는 순서가 12가지, 목표 5의 치트를 쓰는 순서가 8가지, 목표 2의 치트를 쓰는 순서와 목표 3의 치트를 쓰는 순서가 각각 3가지다. 모두 더하면 38이다.