func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   inline void checkmin(T &a, T b) {     if (a > b) a = b;   }   template <class T>   inline void checkmax(T &a, T b) {     if (a < b) a = b;   }   const int oo = 1 << 30;   const double eps = 1e-7;   const int N = 1 << 10;   const int M = 1;   const long long P = 1000000007;   long long dp[N][N];   int mx;   char s[N];   inline int is(int k) { return 4 == k || 7 == k; }   inline int to(int f, int flag) {     flag = is(flag);     if (0 == f) return 0;     if (1 == f || mx + 1 == f) return flag ? f - 1 : (mx + 1);     return flag ? 0 : f - 1;   }   long long dfs(int id, int f) {     if (id < 0) return !f;     long long &r = dp[id][f];     if (-1 != r) return r;     r = 0;     id--;     r += 8 * dfs(id, to(f, 0));     r += 2 * dfs(id, to(f, 4));     return r %= P;   }   void pre() {     (memset((dp), -1, sizeof(dp)));     dfs(1001, mx + 1);   }   long long dfs_d(int id, int f) {     if (id < 0) return !f;     int k, u;     long long r = 0;     u = s[id];     id--;     for (k = 0; k < (u); k++) r += dfs(id, to(f, k));     r += dfs_d(id, to(f, k));     return r %= P;   }   long long doit(int flag) {     (memset((s), 0, sizeof(s)));     scanf( %s , s);     int i, sn;     sn = strlen(s);     for (i = 0; i < (sn); i++) s[i] -=  0 ;     reverse(s, s + sn);     s[0] -= flag;     for (i = 0; s[i] < 0; i++) {       s[i] = 9;       s[i + 1]--;     }     return dfs_d(sn, mx + 1);   }   int main() {     int T, _ = 0;     long long ans = 0;     scanf( %d %d , &T, &mx);     pre();     while (_++ < T) {       ans = -doit(1);       ans += doit(0);       ans = (ans % P + P) % P;       printf( %I64d n , ans);     }     return 0;   }   