func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 1e9 + 7;   long long dp[20][20][20];   int a[20];   long long num[20];   long long dfs(int pos, int pre, int sta, bool flag) {     if (pos == 0) {       if (pre == sta)         return 1;       else         return 0;     }     if (dp[pos][pre][sta] != -1 && !flag) return dp[pos][pre][sta];     int maxx = flag ? a[pos] : 9;     long long sum = 0;     for (int i = 0; i <= maxx; i++) {       sum += dfs(pos - 1, pre + (i == 4 || i == 7), sta, flag && (i == a[pos]));     }     if (!flag) dp[pos][pre][sta] = sum;     return sum;   }   long long solve(int pos, int res) {     long long ans = 0;     if (pos == 7) return 1;     for (int i = 0; i <= res; i++) {       if (num[i]) {         num[i]--;         ans = (ans + (num[i] + 1) * solve(pos + 1, res - i) % mod) % mod;         num[i]++;       }     }     return ans;   }   void cal(int x) {     int len = 0;     while (x) {       len++;       a[len] = x % 10;       x /= 10;     }     for (int i = 0; i <= len; i++) {       num[i] = dfs(len, 0, i, 1);     }     num[0]--;     long long ans = 0;     for (int i = 1; i <= len; i++) {       ans = (ans + num[i] * solve(1, i - 1) % mod) % mod;     }     printf( %lld n , ans);   }   int main() {     memset(dp, -1, sizeof dp);     int m;     scanf( %d , &m);     cal(m);   }   