func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /STACK:1024000000,1024000000 )   using namespace std;   int n, k;   char str[100005];   long long jie[100005];   long long ni[100005];   long long sum[100005];   long long extend_gcd(long long a, long long b, long long &x, long long &y) {     if (b == 0) {       x = 1, y = 0;       return a;     }     long long gcd = extend_gcd(b, a % b, x, y);     long long t = x;     x = y;     y = t - a / b * x;     return gcd;   }   long long Get_Inverse(long long num) {     long long x, y;     extend_gcd(num, 1000000007, x, y);     return (x % 1000000007 + 1000000007) % 1000000007;   }   void init() {     jie[0] = jie[1] = 1;     ni[0] = ni[1] = 1;     for (int i = 2; i <= 100000; i++) {       jie[i] = (jie[i - 1] * i) % 1000000007;       ni[i] = Get_Inverse(jie[i]);     }   }   long long cal(int n, int m) {     if (n < m) return 0;     return jie[n] * ni[n - m] % 1000000007 * ni[m] % 1000000007;   }   int main(void) {     init();     scanf( %d%d , &n, &k);     scanf( %s , str + 1);     long long ans = 0;     long long ten = 1;     for (int i = 1; i <= n; i++) {       sum[i] =           (sum[i - 1] + ten * cal(n - i - 1, k - 1) % 1000000007) % 1000000007;       ten = ten * 10 % 1000000007;     }     ten = 1;     for (int i = n; i >= 1; i--) {       int c = str[i] -  0 ;       ans += c * ten % 1000000007 * cal(i - 1, k) % 1000000007;       ans += c * sum[n - i] % 1000000007;       ans %= 1000000007;       ten = ten * 10 % 1000000007;     }     printf( %I64d n , ans);     return 0;   }   