---
# System prepended metadata

title: CHIA KẸO
tags: [Propose for Bedao]

---

---
tags: 'Propose for Bedao'
---
# CHIA KẸO

<h2>
    Statement
</h2>

Có $n$ cái kẹo trên bàn; người ta muốn cất kẹo vào trong một số túi sao cho mỗi túi chứa một số các viên kẹo nằm liên tiếp nhau trên bàn.

Đồng thời; mỗi túi có không quá $m$ viên kẹo, và số kẹo trong hai túi liên tiếp hơn kém nhau không quá $d$ viên.

<b>Yêu cầu:</b> Bạn hãy tính số cách chia kẹo vào túi thỏa mãn nhé.

<h2>
    Input
</h2>

- Một dòng chứa ba số nguyên dương $n, m, d$ ($n \le 10^{18}, d\le m \le 10$).

<h2>
    Output
</h2>

- In ra một số nguyên là số cách chia kẹo. Vì đáp án có thể rất lớn nên hãy in ra số dư khi chia cho $10^9 + 7$.

<h2>
   Scoring 
</h2>

- Subtask 1 (50 điểm): $n\le 10^5$.
- Subtask 2 (50 điểm): $n\le 10^{18}$.

<h2>
    Example
</h2>



| Input | Output |
| ----- | ------ |
| 5 3 1 | 10     |

<h3>
    Solution
</h3>

Gọi $f(i,j)$ là số cách chia $i$ kẹo vào các túi sao cho số kẹo ở túi cuối cùng là $j$. $f(i,j)=\sum_{t=j-d}^{j+d}f(i-j,t)$
Từ đây ta ra được thuật toán nhân ma trận.
Code: https://ideone.com/4tLHec