func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   inline bool smin(T &a, const T &b) {     return b < a ? a = b, 1 : 0;   }   template <typename T>   inline bool smax(T &a, const T &b) {     return a < b ? a = b, 1 : 0;   }   const long long N = 1e5 + 10, mod = (long long)1e9 + 7;   long long n, k, ps[N], f[N], inv[N], pw10[N];   string s;   long long pw(long long x, long long y) {     x %= mod;     long long ret = 1;     for (; y; y >>= 1, (x *= x) %= mod)       if (y & 1) (ret *= x) %= mod;     return ret;   }   long long C(long long n, long long r) {     if (r > n || r < 0 || n < 0) return 0;     return ((f[n] * inv[r] % mod) * inv[n - r] % mod) % mod;   }   int32_t main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     cin >> n >> k >> s;     ps[0] = s[0] -  0 ;     for (long long i = 1; i < n; ++i) (ps[i] = ps[i - 1] + (s[i] -  0 )) %= mod;     f[0] = inv[0] = 1;     for (long long i = 1; i < N; ++i) {       (f[i] = f[i - 1] * i) %= mod;       inv[i] = pw(f[i], mod - 2);     }     pw10[0] = 1;     for (long long i = 1; i < N; ++i) (pw10[i] = pw10[i - 1] * 10) %= mod;     long long res = 0;     for (long long sz = 0; sz <= n - 2; ++sz) {       long long add =           pw10[sz] * C(n - sz - 2, k - 1) % mod * ps[n - sz - 2] % mod;       (res += add) %= mod;     }     for (long long i = 0; i < n; ++i) {       long long add = (s[i] -  0 ) * pw10[n - i - 1] % mod * C(i, k);       (res += add) %= mod;     }     cout << res <<   n ;   }   