#abc158e. [abc158_e]Divisible Substring

[abc158_e]Divisible Substring

問題文

高橋君は 0 から 9 までの数字から成る長さ NN の文字列 SS を持っています。

素数 PP が好きな高橋君は、SS の空でない連続する部分文字列 Ntimes(N+1)/2N \\times (N + 1) / 2 個のうち、十進表記の整数と見なした際に PP で割り切れるものの個数を知りたくなりました。

ただし部分文字列は先頭が 0 であっても良いものとし、文字列として等しい場合や、整数と見なした際に等しい場合も、部分文字列の SS 内の位置で区別します。

高橋君のためにこの個数を計算してください。

制約

  • 1leqNleq2times1051 \\leq N \\leq 2 \\times 10^5
  • SS は数字から成る
  • S=N|S| = N
  • 2leqPleq100002 \\leq P \\leq 10000
  • PP は素数である

入力

入力は以下の形式で標準入力から与えられる。

NN PP SS

出力

SS の空でない連続する部分文字列であって、十進表記の整数と見なした際に PP で割り切れるものの個数を出力せよ。


入力例 1

4 3
3543

出力例 1

SS = 3543 です。SS の空でない連続する部分文字列は次の 1010 個があります。

  • 333 で割り切れる。

  • 3533 で割り切れない。

  • 35433 で割り切れる。

  • 354333 で割り切れる。

  • 533 で割り切れない。

  • 5433 で割り切れる。

  • 54333 で割り切れる。

  • 433 で割り切れない。

  • 4333 で割り切れない。

  • 333 で割り切れる。

このうち 33 で割り切れるものは 66 個であるので、66 を出力してください。


入力例 2

4 2
2020

出力例 2

10

SS = 2020 です。SS の空でない連続する部分文字列は 1010 個ありますが、その全てが 22 で割り切れるので 1010 を出力してください。

先頭が 0 である部分文字列も許容されることに注意してください。


入力例 3

20 11
33883322005544116655

出力例 3

68