해시 함수

아직 제출이 없습니다시간 제한3초메모리 제한256 MB

문제

창영이는 시스템 프로그래밍 숙제에 쓸 해시 함수를 만들고 있다. 이 함수는 단어를 숫자로 바꾸며, 다음과 같이 재귀적으로 정의된다.

  • f(ε)=0f(\varepsilon) = 0
  • f(w+x)=((f(w)×33)ord(x))mod2Mf(w + x) = ((f(w) \times 33) \oplus \mathrm{ord}(x)) \bmod 2^M

ε\varepsilon은 빈 단어, ww는 단어, xx는 그 뒤에 붙이는 한 글자다. 단어는 알파벳 소문자로만 이루어진다. \oplus는 비트 단위 XOR 연산이고 (01101010=11000110 \oplus 1010 = 1100), ord(x)\mathrm{ord}(x)xx가 알파벳에서 몇 번째 글자인지를 나타낸다 (ord(a)=1\mathrm{ord}(a) = 1, ord(z)=26\mathrm{ord}(z) = 26). AmodBA \bmod BAABB로 나눈 나머지다.

M=10M = 10이면 해시값은 다음과 같다.

  • f(a)=1f(a) = 1
  • f(aa)=32f(aa) = 32
  • f(kit)=438f(kit) = 438

길이가 NN인 단어 중 해시값이 KK인 것이 몇 개인지 세는 프로그램을 작성하시오.

입력

첫째 줄에 NN, KK, MM이 공백으로 구분되어 주어진다. (1N101 \le N \le 10, 0K<2M0 \le K < 2^M, 6M256 \le M \le 25)

출력

길이가 NN이고 해시값이 KK인 단어의 개수를 출력한다.

힌트

N=3N = 3, K=16K = 16, M=10M = 10일 때 조건을 만족하는 단어는 dxl, hph, lxd, xpx이다.