func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e5 + 5;   const long long mod = 1e9 + 7;   long long n, m;   struct mat {     int a[105][105];     mat() { memset(a, 0, sizeof(a)); }     mat operator*(const mat &b) const {       mat c;       for (int i = (1); i < (m + 1); i++) {         for (int j = (1); j < (m + 1); j++) {           for (int k = (1); k < (m + 1); k++) {             c.a[i][j] = (c.a[i][j] + a[i][k] % mod * b.a[k][j] % mod) % mod;           }         }       }       return c;     }   };   mat mod_pow(mat x, long long n) {     mat res;     for (int i = (1); i < (m + 1); i++) res.a[i][i] = 1;     while (n > 0) {       if (n & 1) res = res * x;       x = x * x;       n >>= 1;     }     return res;   }   int main() {     cin >> n >> m;     mat b, x, ans;     for (int i = (1); i < (m + 1); i++) b.a[i][1] = 1;     for (int i = (2); i < (m + 1); i++) x.a[i][i - 1] = 1;     x.a[1][1] = 1;     x.a[1][m] = 1;     ans = mod_pow(x, n - m + 1) * b;     cout << ans.a[1][1];     return 0;   }   