func_code_string: #include <bits/stdc++.h>   using namespace std;   long long good[3000];   long long fact[20];   int q = 0;   void gen(long long sum, int left) {     if (!left) {       good[q++] = sum;     } else {       if (!sum) {         gen(sum, left - 1);       }       gen(sum * 10 + 4, left - 1);       gen(sum * 10 + 7, left - 1);     }   }   bool is_lucky(int v) {     while (v) {       if (v % 10 != 4 && v % 10 != 7) {         return false;       }       v /= 10;     }     return true;   }   void true_main() {     gen(0, 10);     vector<int> per(20);     vector<bool> fre(20);     int n;     long long k;     fact[0] = 1;     for (int i = 1; i < 20; i++) {       fact[i] = fact[i - 1] * i;     }     cin >> n >> k;     if (n < 15) {       if (k > fact[n]) {         puts( -1 );         return;       }     }     int ans = 0;     for (int i = 1; i < q; i++) {       if (good[i] <= n - 15) {         ans++;       }     }     int m = min(n, 15);     k--;     for (int i = 0; i < m; i++) {       long long q = k / fact[m - i - 1];       k -= q * fact[m - i - 1];       for (int j = 0;; j++) {         if (!fre[j]) {           if (!q) {             fre[j] = true;             per[i] = j;             break;           }           q--;         }       }     }     for (int i = 0; i < m; i++) {       if (is_lucky(n - m + per[i] + 1) && is_lucky(n - m + i + 1)) {         ans++;       }     }     cout << ans;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     long long t = 1;     while (t--) {       true_main();       cout <<   n ;     }     return 0;   }   