트리 위의 게임
시간 제한5초메모리 제한512 MB
트리에서 경로의 카드 색을 뽑고 GCD로 점수를 계산한 뒤 카드 하나를 바꿉니다. 각 친구의 점수를 10^9+7로 나눈 나머지로 출력합니다.
문제
친구 명이 부터 까지 번호가 붙은 채로 게임을 한다. 색이 가지인 카드가 있으며, 색은 부터 까지 번호가 붙어 있다. 색 카드마다 고정된 값 가 있다.
게임을 시작할 때 각 플레이어는 카드를 원하는 만큼 고르되, 같은 색 카드는 한 장만 고른다. 서로 다른 친구가 같은 색 카드를 골라도 된다. 덱의 점수는 덱에 있는 카드 값들의 최대공약수(GCD)다. 빈 덱의 점수는 이다.
게임은 부터 까지 번호가 붙은 노드 개로 이루어진 트리 위에서 진행된다. 노드 에는 색 의 카드가 한 장 있다. 서로 다른 노드가 같은 색 카드를 가질 수 있다.
게임은 라운드로 진행된다. 라운드에서는 번째 친구가 플레이한다. 먼저 친구는 서로 다른 두 정점 와 를 고른다. 그다음 에서 까지 가는 경로 위의 모든 노드 (양 끝 와 포함)에 대해, 본인을 포함한 모든 플레이어가 색 의 카드를 한 장씩 뽑는다. 이미 그 색 카드를 가지고 있던 플레이어는 두 장을 모두 버린다. 이후 친구는 모든 플레이어 덱 점수의 합(본인 덱 포함)을 얻는다. 마지막으로 친구는 노드 를 고르고, 더미에서 색 의 새 카드를 뽑아 의 카드와 바꾼다. 기존 카드는 버려지며 라운드가 끝난다.
입력
첫 줄에는 정수 , , 이 주어진다 (, ). 각각 친구 수(라운드 수), 카드 색의 수, 노드 수다.
둘째 줄에는 정수 ()이 주어진다.
이어지는 개의 줄마다 정수 ()로 시작하며, 이는 그 친구가 처음 가진 카드 수다. 뒤이어 개의 정수 ()이 주어지며, 이는 그 카드들의 색이다.
다음 줄에는 정수 ()이 주어진다. 는 노드 카드의 색이다.
이후 개의 줄에 간선 , ()가 주어진다. 이 간선들은 트리를 이룬다.
마지막 개의 줄에는 라운드 정보 , , , (; ; )가 주어진다. 와 는 그 라운드에서 고른 두 노드이고, 는 카드를 바꿀 노드, 는 새 카드의 색이다.
출력
한 줄에 개의 정수 을 출력한다. 는 게임이 끝났을 때 번째 친구가 얻은 점수를 로 나눈 나머지다.