func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MOD = 1000000007;   int dp[1001][2010];   int digit[1002], k;   void init() { memset(dp, -1, sizeof dp); }   int dfs(int pos, int dist, bool doing) {     if (pos == -1) return dist == 0;     if (!doing && dp[pos][dist] != -1) return dp[pos][dist];     int ans = 0;     int end = doing ? digit[pos] : 9;     for (int i = 0; i <= end; i++) {       int nextdist = dist == 0 ? 0 : dist + 1;       if (i == 4 || i == 7) {         if (dist <= k)           nextdist = 0;         else           nextdist = 1;       }       ans = (ans + dfs(pos - 1, nextdist, doing && i == end)) % MOD;     }     if (!doing) dp[pos][dist] = ans;     return ans;   }   int cal(char x[]) {     int pos = 0, l = strlen(x);     while (pos < l) {       digit[pos] = x[l - pos - 1] -  0 ;       pos++;     }     return dfs(pos - 1, k + 2, 1);   }   bool check(char x[]) {     int dist = k + 1;     for (int i = 0; i < strlen(x); i++) {       if (!dist) break;       if (x[i] ==  4  || x[i] ==  7 ) {         if (dist <= k)           dist = 0;         else           dist = 1;       } else         dist++;     }     return dist == 0;   }   int main() {     int T;     init();     char a[1002], b[1002];     scanf( %d %d , &T, &k);     while (T--) {       scanf( %s %s , a, b);       int ansa = cal(a);       int ansb = cal(b);       if (check(a)) ansa--;       ansb = ((ansb - ansa) % MOD + MOD) % MOD;       printf( %d n , ansb);     }     return 0;   }   