func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long inf = 1000000001;   const long long maxg = 4444444444LL;   vector<long long> g;   void recurs(int d, int len, long long z) {     if (d == len)       g.push_back(z);     else {       recurs(d + 1, len, z * 10 + 4);       recurs(d + 1, len, z * 10 + 7);     }   }   long long a[1000];   long long f[100];   long long fact(int n) {     if (n > 50) return inf;     if (f[n] != 0) return f[n];     if (n == 1 || n == 0) return f[n] = 1;     return f[n] = min(inf, n * min(inf, (fact(n - 1))));   }   bool good(int a) {     if (a == 0) return false;     while (a > 0) {       if (!(a % 10 == 4 || a % 10 == 7)) return false;       a /= 10;     }     return true;   }   int main() {     for (int ll = 1; ll <= 9; ll++) {       recurs(0, ll, 0);     }     g.push_back(maxg);     long long n, k;     cin >> n >> k;     if (fact(n) < k) {       cout << -1 << endl;       return 0;     }     long long p = 1;     long long m = n - 1;     while (fact(n - m) + 1 <= k) m--;     long long s = n - m;     for (int i = 1; i <= s; i++) a[i] = m + i;     while (p < k) {       for (int i = 1;; i++) {         if (fact(i + 1) + p > k) {           p += fact(i);           for (int j = s - i + 1;; j++) {             if (a[j] > a[s - i]) {               swap(a[j], a[s - i]);               break;             }           }           break;         }       }     }     long long ans = 0;     for (int i = 0; i < int(g.size()); i++) {       if (g[i] <= m) ans = i + 1;     }     for (int i = 1; i <= s; i++) {       if (good(i + m) && good(a[i])) ans++;     }     cout << ans << endl;     return 0;   }   