완전하게 순찰하기
시간 제한2초메모리 제한1024 MB
모든 도로를 한 번씩만 지나는 순환 경로들로 나누는 방법의 수를 10^9+7로 나눈 나머지로 구합니다.
문제
최근 조선의 수도 한양에서 범죄 사건이 급증하자, 임금은 도성 내외의 순찰을 강화하라는 어명을 내렸다. 이 중대한 임무를 맡은 포도대장은 미래에서 온 여러분에게 도움을 요청했다.
포도청은 도성 내외의 위험 장소를 조사하고, 각 장소에 부터 까지의 정수로 고유 번호를 하나씩 매겼다. 모든 장소는 양방향 통행이 가능한 길로 서로 연결되어 있으며, 각 장소에 연결된 길의 수는 짝수이다. 각 길은 양 끝의 두 장소만 연결한다.
포졸은 지정된 순찰 경로를 따라 움직이며 순찰한다. 한 장소에서 다른 장소로 이동할 때는 주어진 길을 따라가야 하며, 이동하는 도중에 방향을 바꿀 수 없다. 포졸이 순찰 경로를 따라 움직이며 방문한 장소 개의 번호를 순서대로 , 지나간 길 개를 순서대로 이라 하자. 길이가 인 순찰 경로는 다음 조건을 만족하는 순열 을 뜻한다. 홀수 번째 원소는 장소 번호이고, 짝수 번째 원소는 길이다.
- 순찰 경로는 출발한 장소로 다시 돌아온다. 같은 장소를 여러 번 지나갈 수 있다.
- 순찰 경로에서 한 번 지나간 길은 다시 지나갈 수 없다.
- 출발한 장소에서 다른 장소로 움직이지 않는 경로는 순찰 경로가 아니다.
- 모든 인 정수 에 대하여 길 는 장소 와 을 연결한다. 길 은 장소 과 을 연결한다.
길이가 인 순찰 경로에 다음 연산을 한 번 이상 사용하여 만들 수 있는 순찰 경로는 모두 서로 동일하다.
- 첫 번째 원소와 두 번째 원소를 뒤로 옮긴다. 즉 를 로 만든다.
- 순찰 경로를 뒤집고 첫 번째 원소를 뒤로 옮긴다. 즉 를 로 만든다.
예를 들어 는 , , 와 모두 같다.
포도청은 도성 내외의 모든 길을 순찰하기 위해 완전한 순찰을 설계하려 한다. 완전한 순찰은 순찰 경로를 원소로 갖는 집합이며, 도성 내외의 모든 길은 완전한 순찰의 원소 중 하나에만 포함되어야 한다. 각 포졸이 어떤 순찰 경로를 맡는지는 고려하지 않으며, 포졸의 인원수에도 제한이 없다고 가정한다. 설계할 수 있는 완전한 순찰의 경우의 수를 로 나눈 나머지를 구하라.
입력
첫 번째 줄에 장소의 수 과 양의 정수 이 공백으로 구분되어 주어진다. (, )
이후 개의 줄에 걸쳐 번째 줄에 세 정수 , , 가 공백으로 구분되어 주어진다. 이는 두 장소 번, 번을 연결하는 길이 개가 있다는 뜻이다. (, , )
두 장소를 연결하는 길에 대한 정보는 한 번만 주어진다. 즉 인 두 정수 , 에 대하여 이다.
출력
설계할 수 있는 완전한 순찰의 경우의 수를 로 나눈 나머지를 출력한다. 이때 은 소수이다.