func_code_string: #include <bits/stdc++.h>   using namespace std;   inline long long read() {     long long x = 0;     char ch = getchar();     bool f = 0;     for (; !isdigit(ch); ch = getchar())       if (ch ==  - ) f = 1;     for (; isdigit(ch); ch = getchar()) x = x * 10 + ch -  0 ;     return f ? -x : x;   }   void write(long long x) {     if (x < 0) putchar( - ), x = -x;     if (x >= 10) write(x / 10);     putchar(x % 10 +  0 );   }   void writeln(long long x) {     write(x);     puts(  );   }   void writep(long long x) {     write(x);     putchar(   );   }   const int N = 5e5 + 5, mo = 1e9 + 7;   int n, m, a[N], fac[N], inv[N], b[N];   char s[N];   int C(int n, int m) {     if (n < m) return 0;     return (long long)fac[n] * inv[m] % mo * inv[n - m] % mo;   }   int ksm(int x, int p) {     int res = 1;     for (; p; p >>= 1, x = (long long)x * x % mo)       if (p & 1) res = (long long)res * x % mo;     return res;   }   void init(int n) {     fac[0] = 1;     for (int i = (int)(1); i <= (int)(n); i++)       fac[i] = (long long)i * fac[i - 1] % mo;     inv[n] = ksm(fac[n], mo - 2);     for (int i = (int)(n - 1); i >= (int)(0); i--)       inv[i] = (long long)(i + 1) * inv[i + 1] % mo;   }   int upd(int x, int y) {     x += y;     if (x >= mo) x -= mo;     return x;   }   int main() {     init(N - 1);     n = read();     m = read();     scanf( %s , s + 1);     for (int i = (int)(1); i <= (int)(n); i++) a[i] = s[i] -  0 ;     reverse(a + 1, a + n + 1);     int sum = 0, now = 1;     b[1] = C(n - 1, m);     for (int i = (int)(2); i <= (int)(n); i++) {       sum = upd(sum, (long long)now * C(n - i, m - 1) % mo);       now = (long long)10 * now % mo;       b[i] = upd(sum, (long long)now * C(n - i, m) % mo);     }     int ans = 0;     for (int i = (int)(1); i <= (int)(n); i++)       ans = upd(ans, (long long)b[i] * a[i] % mo);     cout << ans;   }   