수열 재활용

시간 제한2초메모리 제한1024 MB

요약
주기 수열 A의 길이 T 구간을 j만큼 mod M으로 밀었을 때 두 결과가 같아지는 순서쌍 (i1,j1),(i2,j2)의 개수를 세는 문제이다.
난이도

어려움10점 중 8점

유형
문자열 매칭, 수학, 정수론, 해시맵
정답자
아직 제출이 없습니다

문제

경희대학교 알고리즘 동아리 KHUA에서는 축하할 일이나 기념할 일이 있을 떄 선물로 수열을 주고받는 PS계의 문화를 본받아 신입 부원들에게 선물로 수열을 나누어 주려고 한다. 하지만 매번 새로운 수열을 만들어 내는 것은 귀찮기 때문에 수열 하나를 만들어 두고 그것을 재활용해서 새로운 수열을 만들어 내기로 했다.

재활용할 무한한 길이의 주기 수열 A_1,A_2,…A\_1, A\_2, \ldots를 만든다. AA의 첫 NN개 원소는 A_1,A_2,…,A_NA\_1, A\_2, \ldots, A\_{N}로 주어지며, i>Ni > N일 때 A_i=A_i−NA\_i = A\_{i - N}이다. 이 수열의 각 원소는 00 이상 M−1M-1 이하의 정수이다. 11 이상 NN 이하인 정수 ii와 00 이상 M−1M-1 이하의 정수 jj에 대해 다음과 같이 정의되는 길이 TT (T≤N)(T \leq N)인 수열 Bi,j_1,Bi,j_2,…,Bi,j_TB^{i, j}\_1, B^{i, j}\_2, \ldots, B^{i, j}\_{T}을 선물로 나누어 주면 좋겠다고 생각했다.

Bi,j_k=(A_i+k+j) mod MB^{i, j}\_k = (A\_{i + k} + j) \bmod M

하지만 이렇게 만들어진 수열이 중복되면 사람들이 수열을 재활용하고 있다는 걸 알아챌 수 있으므로 이런 상황은 최대한 피하려고 한다.

재활용해 만들어낸 임의의 두 수열이 같을 확률을 구해 얼마나 수열을 재활용할 수 있을 지 예측하려고 한다. 1≤i_1,i_2≤N1 \leq i\_1, i\_2 \leq N이고 0≤j_1,j_2≤M−10 \leq j\_1, j\_2 \leq M-1인 정수 i_1i\_1, i_2i\_2, j_1j\_1, j_2j\_2를 균일한 확률로 무작위로 뽑았을 때 Bi_1,j_1B^{i\_1, j\_1}과 Bi_2,j_2B^{i\_2, j\_2}가 서로 같을 확률을 구해야 한다. 각 수는 독립적으로 선택되므로 (i_1,j_1)=(i_2,j_2)(i\_1, j\_1) = (i\_2, j\_2)인 경우도 발생할 수 있다.

입력

첫째 줄에 정수 NN과 MM이 공백으로 구분되어 주어진다. (1≤N,M≤1051 \leq N, M \leq 10^5) NN은 수열 AA의 원소 중 입력으로 주어지는 것의 개수이다.

둘째 줄에 NN개의 정수 A_1,A_2,…,A_NA\_1, A\_2, \ldots, A\_{N}이 공백으로 구분되어 주어진다. (0≤A_i≤M−10 \leq A\_i \leq M - 1)

셋째 줄에 선물로 나눠 줄 수열 Bi,jB^{i, j}의 길이를 나타내는 정수 TT가 주어진다. (1≤T≤N1 \leq T \leq N)

출력

재활용해서 만든 두 수열이 같을 확률을 출력하라. 구한 확률이 기약분수로 나타냈을 때 P/Q{P}/{Q}라면 P×Q−1 mod 109+7P \times Q^{-1} \bmod 10^9 + 7를 대신 출력하라. 여기서 Q−1Q^{-1}은 109+710^9 + 7에 대한 QQ의 모듈러 역원이다.

예제4

  1. 예제 1

    입력
    6 4
    1 2 1 2 3 0
    2
    
    예상 출력
    180555557
    
  2. 예제 2

    입력
    3 1
    0 0 0
    2
    
    예상 출력
    1
    
  3. 예제 3

    입력
    5 10
    1 1 2 3 5
    3
    
    예상 출력
    140000001
    
  4. 예제 4

    입력
    28 12
    0 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 3
    3
    
    예상 출력
    724489801