func_code_string: #include <bits/stdc++.h>   using namespace std;   int x[110000];   char str[110000];   long long tail[110000], a[110000], b[110000], c[110000], sum[110000],       cm1[110000], cm2[110000];   int n, m;   const long long MOD = 1000000007L;   long long mod_reset(long long x) { return (x % MOD + MOD) % MOD; }   void extgcd(long long a, long long b, long long &x, long long &y) {     if (b == 0) {       x = 1L;       y = 0L;       return;     }     long long div = a / b;     extgcd(b, a % b, y, x);     y = mod_reset(y - div * x % MOD);   }   long long get_antimul(long long a) {     long long x, y;     extgcd(a, MOD, x, y);     return x;   }   void conduct() {     long long ans;     scanf( %s , str);     for (int i = 0; i < n; ++i) x[i + 1] = str[i] -  0 ;     if (m == 0) {       ans = 0L;       for (int i = 1; i <= n; ++i) ans = (ans * 10 + x[i]) % MOD;       cout << ans << endl;       return;     }     cm1[n - m] = cm2[n - m] = 1;     for (int i = n - m; i; --i) {       long long ref = get_antimul(n - i - m + 1);       cm1[i - 1] = (cm1[i] * (n - i)) % MOD * ref % MOD;       cm2[i - 1] = (cm2[i] * (n - i - 1)) % MOD * ref % MOD;     }     tail[0] = 0L;     for (int i = 1; i <= n; ++i) tail[i] = tail[i - 1] + x[n - i + 1];     a[0] = b[0] = sum[0] = ans = 0L;     c[0] = 1L;     for (int i = 1; i <= n - m; ++i) {       a[i] = (a[i - 1] * 10 + x[i]) % MOD;       c[i] = c[i - 1] * 10 % MOD;       b[i] = (b[i - 1] + c[i - 1] * x[n - i + 1]) % MOD;       sum[i] = (mod_reset(sum[i - 1] - b[i - 1]) * 10 + tail[n - i + 1]) % MOD;       ans = (ans + mod_reset(sum[i] - a[i] - b[i]) * cm2[i] +              (a[i] + b[i]) * cm1[i]) %             MOD;     }     cout << ans << endl;   }   int main() {     while (scanf( %d%d , &n, &m) != EOF) conduct();     return 0;   }   