#CF497E. 子序列归来

子序列归来

子序列归来

  • 时间限制:1 秒
  • 内存限制:256 MiB

题目描述

记 sk(n)s_k(n) 为非负整数 nn 在 kk 进制下的各位数字之和。例如,s2(5)=s2(1012)=2s_2(5)=s_2(101_2)=2,s3(14)=s3(1123)=4s_3(14)=s_3(112_3)=4。

定义长度为 nn 的序列

aj=sk(j) mod k(0≤j<n)。a_j=s_k(j)\bmod k\qquad(0\le j<n)。

求序列 a0,a1,…,an−1a_0,a_1,\ldots,a_{n-1} 有多少个不同的子序列。空序列也算一个子序列。答案对 109+710^9+7 取模。

输入格式

一行两个整数 n,kn,k。

输出格式

输出不同子序列的数量对 109+710^9+7 取模后的结果。

样例输入 1

4 2

样例输出 1

11

样例输入 2

7 7

样例输出 2

128

数据范围

1≤n≤10181\le n\le10^{18},2≤k≤302\le k\le30。

子任务编号 分值 特殊限制
1 20 n≤2×105n\le2\times10^5
2 40 k≤8k\le8
3 无特殊限制

说明

第一个样例对应序列 (0,1,1,0)(0,1,1,0),共有 1111 个不同子序列。第二个样例中各项互不相同,因此所有 272^7 种选取方式都得到不同序列。