func_code_string: #include <bits/stdc++.h>   using namespace std;   double sqr(double x) { return x * x; }   double distsqr(double x, double y, double a, double b) {     return sqr((x - a)) + sqr((y - b));   }   double cosine_angle(double a, double b, double c) {     return (double)(sqr(a) + sqr(b) - sqr(c)) / ((double)2.0 * a * b);   }   template <class T>   T Maximum(T a, T b) {     return a > b ? a : b;   }   template <class T>   T Minimum(T a, T b) {     return a < b ? a : b;   }   template <class T>   T GCD(T a, T b) {     if (!b) return a;     return GCD(b, a % b);   }   template <class T>   void SWAP(T &a, T &b) {     T temp = a;     a = b;     b = temp;     return;   }   template <class T>   T BigMod(T a, T n, T mod) {     if (!n) return (T)1 % mod;     long long int power = BigMod(a, n >> 1, mod);     power %= mod;     power *= power;     power %= mod;     if (n & 1) power *= a % mod, power %= mod;     return power;   }   template <class T>   T ExtendedEuclid(T a, T b, T c) {     if (!a) return 0;     return (b * ExtendedEuclid(b % a, a, -c) + c) / a;   }   template <class T>   T ModInverse(T a, T m) {     return ((ExtendedEuclid(a, m, (T)GCD(a, m))) % (m) + (m)) % (m);   }   long long int valk[100010], valk_1[100010], cval[100010];   void Processsing(int n, int k) {     int i;     long long int power, temp;     if (k > 0) valk_1[k - 1] = 1;     for (i = k, power = 1; i < n; i++) {       if (i == k)         valk[i] = 1;       else {         valk[i] = valk[i - 1] * i;         valk[i] %= 1000000007;         valk[i] *= ModInverse((long long int)(i - k), (long long int)1000000007);         valk[i] %= 1000000007;       }       valk_1[i] = valk_1[i - 1] * i;       valk_1[i] %= 1000000007;       valk_1[i] *=           ModInverse((long long int)(i - k + 1), (long long int)1000000007);       valk_1[i] %= 1000000007;     }     for (i = 0; i < n - k; i++) {       if (i)         power *= 10;       else         power = 1;       power %= 1000000007;       temp = valk_1[n - 2 - i] * power;       temp %= 1000000007;       if (i)         cval[i] = cval[i - 1] + temp;       else         cval[i] = temp;       cval[i] %= 1000000007;     }   }   int main() {     int i, n, k;     char c;     long long int counts, temp;     scanf( %d %d , &n, &k);     Processsing(n, k);     for (i = counts = 0; i < n; i++) {       scanf(  %c , &c);       c -=  0 ;       if (i < k)         counts += cval[n - k - 1] * (int)c;       else {         temp = cval[n - 2 - i] + valk[i] * BigMod((long long int)10,                                                   (long long int)(n - 1 - i),                                                   (long long int)1000000007);         temp %= 1000000007;         temp *= (int)c;         temp %= 1000000007;         counts += temp;       }       counts %= 1000000007;     }     printf( %I64d n , counts);     return 0;   }   