만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

해시 해킹

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

요약
길이가 N이고 원소가 0 이상 M 미만인 수열 가운데, 가중합을 M으로 나눈 나머지가 H인 수열의 개수를 10^9+7로 나눈 값을 구합니다.
난이도

쉬움10점 중 3점

유형
수학, 정수론
정답자
아직 제출이 없습니다

문제

그린닷컴의 운영자 연두는 비밀번호를 평문 그대로 저장하던 잘못을 고치고, 이제부터 해시 함수를 적용해 저장하려고 한다. 연두가 아는 해시 함수는 알고리즘 문제 풀이에 많이 쓰이는 롤링 해시 함수뿐이라, 이를 응용해 쓰기로 했다.

그린닷컴의 비밀번호는 길이가 정확히 NN이어야 하며, 비밀번호를 이루는 문자는 지정된 MM개의 문자 중 하나여야 한다. 사용 가능한 각 문자를 0부터 차례로 정수에 대응시키면, 비밀번호는 길이가 NN이고 모든 원소가 0 이상 M−1M-1 이하인 배열 P=[P0,P1,…,PN−1]P = [P_0, P_1, \dots, P_{N-1}]로 나타낼 수 있다.

비밀번호를 배열 PP로 나타낸 뒤에는, 미리 정해진 정수 AA를 이용해 다음 해시 함수 hh를 적용한다.

h(P)=(P0⋅A0+P1⋅A1+⋯+PN−1⋅AN−1) mod Mh(P) = (P_0 \cdot A^0 + P_1 \cdot A^1 + \dots + P_{N-1} \cdot A^{N-1}) \bmod M

예를 들어 P=[10,30,20]P = [10, 30, 20], A=7A = 7, M=55M = 55인 경우를 보자. 이때 h(P)=(10⋅70+30⋅71+20⋅72) mod 55=(10+210+980) mod 55=45h(P) = (10 \cdot 7^0 + 30 \cdot 7^1 + 20 \cdot 7^2) \bmod 55 = (10 + 210 + 980) \bmod 55 = 45이다. 여기서  mod \bmod는 나머지 연산이며, 1200=21⋅55+451200 = 21 \cdot 55 + 45이므로 1200 mod 55=451200 \bmod 55 = 45이다. 해시값은 항상 0 이상 M−1M-1 이하의 정수이다.

그린닷컴 관리자 계정의 비밀번호 해시값을 알아낸 재현이는 이 값으로 원래 비밀번호를 역추적하려고 한다. 그린닷컴에서 사용 가능한 비밀번호는 모두 MNM^N개인데, 그중 알아낸 해시값과 일치하는 비밀번호가 몇 개인지 구해 달라.

입력

첫째 줄에 비밀번호의 길이 NN, 문자 종류의 개수 MM, 정수 AA가 주어진다. (1≤N,M,A≤5 000 0001 \le N, M, A \le 5\,000\,000)

둘째 줄에 재현이가 알아낸 해시값 정수 HH가 주어진다. (0≤H<M0 \le H < M)

출력

해시값이 HH인 비밀번호의 개수를 1 000 000 0071\,000\,000\,007 (=109+7= 10^9 + 7)로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

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

    입력
    5000000 5000000 5000000
    1
    
    예상 출력
    73352076