func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 0x3f3f3f3f;   const int MOD = 1e9 + 7;   int n, k;   long long quick(long long A, long long B) {     if (B == 0) return 1;     long long tmp = quick(A, B >> 1);     tmp *= tmp;     tmp %= MOD;     if (B & 1) tmp *= A, tmp %= MOD;     return tmp;   }   int fact[100000 + 20], invfact[100000 + 20];   int suf[100000 + 20];   int tot;   int rest = 0;   long long c(int A, int B) {     if (B == 0) return 1;     if (B < 0) return 0;     if (A < B) return 0;     return 1ll * fact[A] * invfact[A - B] % MOD * invfact[B] % MOD;   }   int main() {     scanf( %d%d , &n, &k);     string s;     cin >> s;     for (int i = n - 1; i >= 1; --i) suf[i] = suf[i + 1] + (s[i - 1] -  0 );     fact[0] = 1;     for (int i = 1; i <= n; ++i) {       fact[i] = 1ll * fact[i - 1] * i % MOD;     }     invfact[n] = quick(fact[n], MOD - 2);     for (int i = n - 1; i >= 0; --i)       invfact[i] = 1ll * invfact[i + 1] * (i + 1) % MOD;     tot = 0;     int bad = 0, ten = 1;     for (int i = 1; i <= n - 2; ++i) {       tot -= bad;       tot += MOD;       tot %= MOD;       tot = 10ll * tot % MOD;       bad += 1ll * ten * (s[n - 1 - i] -  0 ) % MOD;       bad %= MOD;       ten = 10ll * ten % MOD;       (tot += suf[i + 1]) %= MOD;       (rest += 1ll * tot * c(n - 2 - i, k - 2) % MOD) %= MOD;     }     int tmp = 0;     for (int i = 1; i <= n - 1; ++i) {       tmp = 10ll * tmp % MOD;       (tmp += (s[i - 1] -  0 )) %= MOD;       (rest += 1ll * tmp * c(n - 1 - i, k - 1) % MOD) %= MOD;     }     int z = 1;     tmp = 0;     for (int i = 1; i <= n; ++i) {       (tmp += 1ll * (s[n - i] -  0 ) * z % MOD) %= MOD;       z = 10ll * z % MOD;       (rest += 1ll * tmp * c(n - 1 - i, k - (i != n)) % MOD) %= MOD;     }     cout << rest << endl;     return 0;   }   