#cf17finalg. [cf17_final_g]Mancala

[cf17_final_g]Mancala

问题描述

考虑以下游戏:

  • 游戏中使用一行 NN 个方块和许多石头。
  • 首先,在第 ii 个方块中放入 aia_i 个石头 (1iN)(1 \leq i \leq N)
  • 玩家可以执行以下操作任意次数:“选择一个整数 ii,使得第 ii 个方块恰好包含 ii 个石头。从第 ii 个方块中移走所有的石头,并将一个石头放在从第 11 个方块到第 i1i-1 个方块的每个方块上。”
  • 玩家的最终得分是方块中剩余的石头总数。

对于长度为 NN 的序列 aa,设 f(a)f(a) 是在 aa 上进行游戏时可以获得的最小得分。

求在长度为 NN 的所有序列 aa 中,每个元素介于 00KK(包括)之间的情况下,f(a)f(a) 的总和。由于可能非常大,请输出答案对 1000000007(=109+7)1000000007(= 10^9+7) 取模的结果。

约束条件

  • 1N1001 \leq N \leq 100
  • 1KN1 \leq K \leq N

输入

输入数据格式如下:

NN KK

输出

打印对 1000000007(=109+7)1000000007(= 10^9+7) 取模后的 f(a)f(a) 的总和。


示例输入 1

2 2

示例输出 1

10

长度为 22 的序列,每个元素介于 0022 之间,共有 99 个。对于每个序列,f(a)f(a) 的值和如何达到它的方法如下:

  • f({0,0})f(\{0,0\}): 00(无法进行操作)
  • f({0,1})f(\{0,1\}): 11(无法进行操作)
  • f({0,2})f(\{0,2\}): 00(选择第 22 个方块,然后选择第 11 个方块)
  • f({1,0})f(\{1,0\}): 00(选择第 11 个方块)
  • f({1,1})f(\{1,1\}): 11(选择第 11 个方块)
  • f({1,2})f(\{1,2\}): 00(选择第 11 个方块,第 22 个方块,然后选择第 11 个方块)
  • f({2,0})f(\{2,0\}): 22(无法进行操作)
  • f({2,1})f(\{2,1\}): 33(无法进行操作)
  • f({2,2})f(\{2,2\}): 33(选择第 22 个方块)

示例输入 2

20 17

示例输出 2

983853488