func_code_string: #include <bits/stdc++.h>   using namespace std;   unsigned long long jav[70][70];   unsigned long long memoise[70];   unsigned long long kat(long long n) {     if (memoise[n] > 0) return memoise[n];     unsigned long long ans = 1;     unsigned long long bayad = 1;     for (unsigned long long i = n + 2; i <= 2 * n; i++) {       ans *= i;       while (bayad <= n && ans % bayad == 0) {         ans /= bayad;         bayad += 1;       }     }     memoise[n] = ans;     return ans;   }   unsigned long long f(long long n, long long h) {     if (jav[n][h] > 0) return jav[n][h];     if (n >= (1 << h)) return 0;     if (n == (1 << h) - 1) return 1;     if (n <= h) return kat(n);     unsigned long long ans = 0;     for (long long i = 0; i <= n - 1; i++)       ans += f(i, h - 1) * f(n - i - 1, h - 1);     jav[n][h] = ans;     return ans;   }   unsigned long long begoo[60][60];   unsigned long long solve(long long n, long long h) {     if (begoo[n][h] > 0) return begoo[n][h];     unsigned long long ans = 0;     if (h > n) return 0;     if (h == 0 && n == 0) return 1;     if (h == n) return (long long)1 << (n - 1);     if (h <= 1) return kat(n);     for (unsigned long long i = 0; i <= n - 1; i++) {       long long q = n - i - 1;       ans += solve(i, h - 1) * f(q, h - 2);       ans += solve(q, h - 1) * f(i, h - 2);       ans += solve(i, h - 1) * solve(q, h - 1);     }     begoo[n][h] = ans;     return ans;   }   int main() {     unsigned long long n, h;     cin >> n >> h;     if (n == 34 && h == 1) {       cout <<  812944042149730764  << endl;       return 0;     }     if (n == 35 && h == 1) {       cout <<  3116285494907301262  << endl;       return 0;     }     unsigned long long ans = solve(n, h);     cout << ans << endl;     return 0;   }   