func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<long long> q;   long long i, j, n, k, m = 1000000007, ww = 1, a[20005], b[20005], c[20005],                         w[20005];   bool flag;   bool otv(int n, bool sign) {     long long t = n;     for (long long j = 0; j < q.size(); j++) {       if (t % q[j] == 0) {         t /= q[j];         if (sign)           w[j]++;         else           w[j]--;         j--;       }       if (t == 1) break;     }     if (t > 1) ww = (ww * t) % m;     return 0;   }   long long ans() {     long long i, j, first = 1;     for (i = 0; i < q.size(); i++)       for (j = 0; j < w[i]; j++) first = (first * q[i]) % m;     first = (ww * first) % m;     return first;   }   int main() {     cin >> n >> k;     for (i = 1; i <= n; i++) cin >> a[i];     if (k == 0) {       for (i = 1; i <= n; i++) cout << a[i] <<    ;       return 0;     }     for (i = 2; i <= 30000; i++) {       flag = 0;       for (j = 0; j < q.size(); j++)         if (i % q[j] == 0) {           flag = 1;           break;         }       if (!flag) q.push_back(i);     }     b[1] = 1;     k--;     for (i = 2; i <= n; i++) {       otv(i + k - 1, 1);       otv(i - 1, 0);       b[i] = ans();     }     for (i = 1; i <= n; i++)       for (j = 0; j < i; j++) c[i] = ((a[i - j] * b[j + 1]) % m + c[i]) % m;     for (i = 1; i <= n; i++) cout << c[i] <<    ;     return 0;   }   