경희대학교 알고리즘 동아리 KHUA에서는 축하할 일이나 기념할 일이 있을 떄 선물로 수열을 주고받는 PS계의 문화를 본받아 신입 부원들에게 선물로 수열을 나누어 주려고 한다. 하지만 매번 새로운 수열을 만들어 내는 것은 귀찮기 때문에 수열 하나를 만들어 두고 그것을 재활용해서 새로운 수열을 만들어 내기로 했다.
재활용할 무한한 길이의 주기 수열 A1, A2, ...를 만든다. A의 첫 N개 원소는 A1, A2, ..., AN로 주어지며, i > N일 때 Ai = Ai - N이다. 이 수열의 각 원소는 0 이상 M - 1 이하의 정수이다. 1 이상 N 이하인 정수 i와 0 이상 M - 1 이하의 정수 j에 대해 다음과 같이 정의되는 길이 T (T ≤ N)인 수열 Bi, j1, Bi, j2, ..., Bi, jT을 선물로 나누어 주면 좋겠다고 생각했다.
하지만 이렇게 만들어진 수열이 중복되면 사람들이 수열을 재활용하고 있다는 걸 알아챌 수 있으므로 이런 상황은 최대한 피하려고 한다.
재활용해 만들어낸 임의의 두 수열이 같을 확률을 구해 얼마나 수열을 재활용할 수 있을 지 예측하려고 한다. 1 ≤ i1, i2 ≤ N이고 0 ≤ j1, j2 ≤ M - 1인 정수 i1, i2, j1, j2를 균일한 확률로 무작위로 뽑았을 때 Bi1, j1과 Bi2, j2가 서로 같을 확률을 구해야 한다. 각 수는 독립적으로 선택되므로 (i1, j1) = (i2, j2)인 경우도 발생할 수 있다. 이 경우를 포함하여 확률을 구해야 한다.
첫 줄에 정수 N과 M이 공백으로 구분되어 주어진다. (1 ≤ N, M ≤ 105)
둘째 줄에 N개의 정수 A1, A2, ..., AN이 공백으로 구분되어 주어진다. (0 ≤ Ai ≤ M - 1)
셋째 줄에 정수 T가 주어진다. (1 ≤ T ≤ N)
재활용해서 만든 두 수열이 같을 확률을 출력하라. 구한 확률이 기약분수로 나타냈을 때 {P} / {Q}라면
를 대신 출력하라. 여기서 Q - 1은 109 + 7에 대한 Q의 모듈러 역원이다.
6 41 2 1 2 3 02
180555557
3 10 0 02
1
5 101 1 2 3 53
140000001
28 120 3 1 2 3 1 2 1 2 5 8 6 7 8 6 7 6 7 10 1 11 0 1 11 0 11 0 33
724489801
첫 번째 예제의 확률은 13 / 72이다.
두 번째 예제에서는 선택할 수 있는 수열이 (0, 0) 하나밖에 없으므로 두 수열이 같을 확률은 1이다.
세 번째 예제의 확률은 1 / 50으로, (i1, j1) = (i2, j2)인 경우에만 두 수열이 같다.
| Название |
|---|


