func_code_string: #include <bits/stdc++.h>   using namespace std;   const int M = 10 + 10;   int minn0[M][M];   int minn[M][M];   int dig[M];   int dignum;   int fac(int x) {     int ans = 1;     for (int i = 1; i <= x; i++) {       ans = ans * i;     }     return ans;   }   int ex(int a, int x) {     int ans = 1;     for (int i = 1; i <= x; i++) {       ans = ans * a;     }     return ans;   }   void mluckyinn0() {     for (int n = 1; n <= 9; n++) {       for (int m = 0; m <= n; m++) {         minn0[0][m] = 1;         int nchm = fac(n) / fac(m) / fac(n - m);         int lucky = ex(2, m);         int unlucky = ex(8, n - m);         minn0[n][m] = nchm * lucky * unlucky;       }     }   }   void mluckyinn() {     minn[1][0] = 7;     minn[1][1] = 2;     for (int n = 2; n <= 9; n++) {       for (int m = 0; m <= n; m++) {         int t1 = 0;         if (m - 1 >= 0 && n - 1 >= 0) {           t1 = minn0[n - 1][m - 1];         }         minn[n][m] = 2 * t1 + 7 * minn0[n - 1][m];       }     }   }   void caldig(int x) {     int idx = 0;     while (x > 0) {       dig[dignum - idx] = x % 10;       x = x / 10;       idx++;     }   }   int lnum[M];   long long int mod = 1000000000 + 7;   int main() {     int m;     cin >> m;     mluckyinn0();     mluckyinn();     int tmp = m;     while (tmp > 0) {       dignum++;       tmp /= 10;     }     caldig(m);     for (int d = 1; d < dignum; d++) {       for (int j = 0; j <= d; j++) {         lnum[j] = lnum[j] + minn[d][j];       }     }     int pre = 0;     int fi = 0;     for (int i = 1; i <= dignum; i++) {       int st = 0;       if (i == 1) {         st = 1;       }       int y47 = 0;       int n47 = 0;       for (int j = st; j < dig[i]; j++) {         if (j == 4 || j == 7) {           y47++;         } else {           n47++;         }       }       int flag = 0;       if (y47 > 0) {         flag = 1;       }       int ndg = dignum - i;       for (int j = 0; j <= ndg; j++) {         lnum[pre + j] = lnum[pre + j] + minn0[ndg][j] * n47;         lnum[pre + j + flag] = lnum[pre + j + flag] + minn0[ndg][j] * y47;       }       if (dig[i] == 4 || dig[i] == 7) {         pre++;       }     }     lnum[pre]++;     long long int ans = 0;     int sta[M];     for (int i1 = 0; i1 <= 9; i1++) {       sta[1] = lnum[i1];       lnum[i1]--;       for (int i2 = 0; i2 <= 9; i2++) {         sta[2] = lnum[i2];         lnum[i2]--;         for (int i3 = 0; i3 <= 9; i3++) {           sta[3] = lnum[i3];           lnum[i3]--;           for (int i4 = 0; i4 <= 9; i4++) {             sta[4] = lnum[i4];             lnum[i4]--;             for (int i5 = 0; i5 <= 9; i5++) {               sta[5] = lnum[i5];               lnum[i5]--;               for (int i6 = 0; i6 <= 9; i6++) {                 sta[6] = lnum[i6];                 lnum[i6]--;                 int st = i1 + i2 + i3 + i4 + i5 + i6;                 for (int i7 = st + 1; i7 <= 9; i7++) {                   sta[7] = lnum[i7];                   lnum[i7]--;                   long long int val = 1;                   for (int j = 1; j <= 7; j++) {                     if (sta[j] <= 0) {                       val = 0;                       break;                     } else {                       val = (val * sta[j]) % mod;                     }                   }                   ans = (ans + val) % mod;                   lnum[i7]++;                 }                 lnum[i6]++;               }               lnum[i5]++;             }             lnum[i4]++;           }           lnum[i3]++;         }         lnum[i2]++;       }       lnum[i1]++;     }     cout << ans << endl;     return 0;   }   