#145 · bus-stops-ca1427

公交车站

Not startedHard
Time10.0 s
Memory1,024 MB
Submissions0
Acceptance0.0%
0%100%

Statement

在火星第一城有 N 个公交车站,它们都排成一条长度为 N-1 km 的直线。市长喜欢把事情保持简单,所以他给公交车站编号为 1 到 N,相邻车站之间恰好相隔 1 km。

城市中还有 K 辆公交车。市长需要规划公交时刻表,他想知道有多少种方式可以完成。这个数可能非常大。幸运的是,有一些限制条件:

- 每天开始时,所有公交车都在前 K 个公交站(每个站一辆公交车)

- 公交车只能从左向右移动(1 是最左边的公交站)

- 每天结束时,所有公交车必须位于最后 K 个公交站(每个站一辆公交车)

- 每个公交车站必须恰好停靠一辆公交车

- 对于同一辆公交车,任意两个连续停靠站之间的距离至多为 P km

帮助市长计算时刻表数量。不过尽量不要给他带来非常糟糕的消息(大量时刻表),所以只需输出真实数量对 30031 取模后的结果。

Input

输入文件的第一行是数据组数 T。

接下来的 T 行每行包含 3 个用单个空格分隔的整数:
N、K 和 P。

### 数据范围

- 1 < T ≤ 30
- 1 < P ≤ 10
- K < N
- 1 < K ≤ P
- 1 < N < 1000
- 1 < N < 10

Output

对于每组数据,按测试用例顺序逐个输出规划公交时刻表的方式数(对 30031 取模),格式为 "[number of ways modulo 30031]"。

Examples

Example 1

Input

3
10 3 3
5 2 3
40 4 8

Output

1
3
7380

Constraints

  • Time limit: 10000 ms
  • Memory limit: 1048576 KB
  • Tag: dynamic-programming
  • Tag: math

Loading language catalog...