유한 걷기
시간 제한2초메모리 제한256 MB
간선마다 a_i를 법으로 하는 카운터가 있을 때, 임의의 시작점에서 길을 따라 걸으며 만들 수 있는 서로 다른 카운터 배열의 개수를 10^9+7로 나눈 나머지로 구합니다.
문제
무향 그래프 가 주어진다. 정점은 개, 간선은 개이다. 루프와 다중 간선이 허용된다. 각 간선에는 양의 정수 가 할당되어 있고, 처음에는 0인 카운터 가 있다.
이 그래프에서 다음 과정을 생각한다. 시작 정점 을 임의로 고르고, 에서 출발하는 간선 을 따라 로 이동한다. 그다음 에서 출발하는 간선 를 따라 로 이동하고, 이를 계속한다. 즉 그래프 위의 경로를 하나 따라가는 것이며, 간선과 정점은 여러 번 지나도 된다. 간선 를 어느 방향으로든 한 번 지날 때마다 그 카운터 는 가 된다. 과정은 몇 번의 이동 뒤에도 멈출 수 있다(0번도 가능하다).
이 과정이 끝난 뒤의 배열 을 설정 배열이라고 부르자. 의 가능한 모든 유한 경로에 대응하는 모든 과정을 생각한다. 이들이 만들어 낼 수 있는 서로 다른 설정 배열은 몇 개인가? 두 설정 배열은 적어도 한 원소가 다르면 서로 다른 것으로 본다. 답이 매우 클 수 있으므로 로 나눈 나머지를 구한다.
입력
입력의 첫 줄에 공백으로 구분된 정수 두 개 , (, )이 주어진다. 각각 그래프의 정점 수와 간선 수이다.
이어서 개의 줄에 간선이 한 줄에 하나씩 주어진다. 번째 간선은 정수 세 개 , , (, )로 표현되며, 각각 간선의 양 끝점과 간선에 할당된 수이다. 정점 번호는 1부터 시작한다.
루프와 다중 간선은 허용된다.
출력
출력은 한 줄이며, 서로 다른 설정 배열의 개수를 로 나눈 나머지를 출력한다.