숲 게임
시간 제한2초메모리 제한1024 MB
각 나무의 뿌리에 놓인 돌을 한 번에 1개에서 K개 사이의 사용하지 않은 간선을 따라 옮기는 게임에서, B가 이기는 나무들의 비어 있지 않은 집합의 개수를 998244353으로 나눈 나머지로 구합니다.
문제
깊은 산 속 숭고한 협곡에는 개의 나무로 이루어진 숲이 있다. 이곳의 번째 나무는 개의 마디와 개의 나뭇가지가 사이클 없이 연결되어 있다. A와 B는 이 숲에서 '숲 게임'을 한다. 게임은 각 나무의 뿌리(1번 마디)에 돌이 하나씩 놓인 상태에서 시작한다. 각 플레이어는 자신의 턴에 나무를 하나 고르고, 그 나무의 돌을 아직 지나간 적 없는 인접한 나뭇가지를 따라 1번 이상 최대 번 이동시킨다. 먼저 A가 턴을 가지며, 이후 번갈아 턴을 가진다. 자신의 턴에 어떤 나무에서도 이동할 수 있는 돌이 없는 플레이어가 패배한다.
B가 나중에 시작하는 불리함을 보상하기 위해, 게임 시작 전에 B가 게임에 사용할 나무를 몇 개 고른다. 다만 게임은 진행되어야 하므로 B는 나무를 적어도 하나 선택한다. 둘 다 최적으로 플레이할 때 B가 이길 수 있는 공집합이 아닌 나무 집합은 몇 개인가?
답이 매우 커질 수 있으므로 으로 나눈 나머지를 출력한다.
입력
첫째 줄에 나무의 개수 과 매 턴마다 움직일 수 있는 최대 횟수 가 주어진다. ()
그 후 개의 나무 정보가 나무 번호의 오름차순으로 주어진다.
번 나무 정보의 첫째 줄에는 나무의 마디 개수 가 주어진다. (, )
다음 개의 줄 중 번째 줄에는 번 나뭇가지가 연결하는 두 마디의 번호 , 가 주어진다. (, )
같은 두 마디를 잇는 나뭇가지는 여러 개 주어지지 않는다.
출력
B가 이길 수 있는 공집합이 아닌 나무 집합의 개수를 으로 나눈 나머지를 출력한다.