func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 13 * 16, M = 1e9 + 7;   int n, m, k;   struct zz {     int a[N][N];   } A;   inline zz cf(zz x, zz y) {     zz z;     memset(z.a, 0, sizeof z.a);     for (int i = 0; i < (1 << m) * (k + 1); i++)       for (int j = 0; j < (1 << m) * (k + 1); j++)         for (int l = 0; l < (1 << m) * (k + 1); l++)           z.a[i][j] = (z.a[i][j] + (long long)x.a[i][l] * y.a[l][j]) % M;     return z;   }   inline zz ksm(zz x, int y) {     zz ans;     memset(ans.a, 0, sizeof ans.a);     for (int i = 0; i < (1 << m) * (k + 1); i++) ans.a[i][i] = 1;     for (; y; y >>= 1, x = cf(x, x))       if (y & 1) ans = cf(ans, x);     return ans;   }   int main() {     scanf( %d%d%d , &n, &k, &m);     for (int i = 0; i < 1 << m; i++)       for (int j = 0; j <= k; j++) {         int num = 1;         for (int l = 0; l < m; l++)           if ((1 << l) & i) num++;         A.a[(i >> 1) * (k + 1) + j][i * (k + 1) + j] = 1;         if (j < k)           A.a[(i >> 1 | (1 << (m - 1))) * (k + 1) + j + 1][i * (k + 1) + j] = num;       }     A = ksm(A, n);     int ans = 0;     for (int i = 0; i < 1 << m; i++) (ans += A.a[i * (k + 1) + k][0]) %= M;     printf( %d n , ans);   }   