func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxk = 50, maxn = 100;   int k, x, n, m;   inline int calc(int x, int y) {     if (!x && y == 2) return 1;     return 0;   }   struct node {     long long c1[2], c2[2][2];     bool h, t;     node operator+(const node &Other) const {       node N = {};       N.h = h;       N.t = Other.t;       for (int i = 0; i < 2; ++i) N.c1[i] = c1[i] + Other.c1[i];       for (int i = 0; i < 2; ++i)         for (int j = 0; j < 2; ++j) N.c2[i][j] = c2[i][j] + Other.c2[i][j];       ++N.c2[t][Other.h];       return N;     }   } f[maxk + 1] = {};   int dp[3][3][maxn + 1][maxn + 1];   int s1[3][3][maxn + 1][maxn + 1], s2[3][3][maxn + 1][maxn + 1];   int main() {     scanf( %d%d%d%d , &k, &x, &n, &m);     f[1].c1[0] = 1;     f[2].c1[1] = 1;     f[2].h = f[2].t = 1;     for (int i = 3; i <= k; ++i) f[i] = f[i - 2] + f[i - 1];     if (n > 1) {       memset(dp, -1, sizeof(dp));       for (int i = 0; i < 3; ++i) dp[i][i][1][0] = 0;       for (int h = 0; h < 3; ++h) {         for (int i = 2; i <= n; ++i)           for (int j1 = 0; j1 < 3; ++j1)             for (int k = 0; k < i - 1; ++k)               if (~dp[h][j1][i - 1][k]) {                 for (int j2 = 0; j2 < 3; ++j2)                   dp[h][j2][i][k + calc(j1, j2)] = j1;               }         for (int t = 0; t < 3; ++t)           for (int k = 0; k < n; ++k)             if (~dp[h][t][n][k] && !s1[h][t][k][0]) {               s1[h][t][k][0] = 1;               for (int dep = n, c = t, j = k; dep; --dep) {                 s1[h][t][k][dep] = c;                 int d = dp[h][c][dep][j];                 j -= calc(d, c);                 c = d;               }             }       }     } else {       for (int i = 0; i < 3; ++i) {         s1[i][i][0][0] = 1;         s1[i][i][0][1] = i;       }     }     if (m > 1) {       memset(dp, -1, sizeof(dp));       for (int i = 0; i < 3; ++i) dp[i][i][1][0] = 0;       for (int h = 0; h < 3; ++h) {         for (int i = 2; i <= m; ++i)           for (int j1 = 0; j1 < 3; ++j1)             for (int k = 0; k < i - 1; ++k)               for (int j2 = 0; j2 < 3; ++j2)                 if (~dp[h][j1][i - 1][k]) dp[h][j2][i][k + calc(j1, j2)] = j1;         for (int t = 0; t < 3; ++t)           for (int k = 0; k < m; ++k)             if (~dp[h][t][m][k]) {               s2[h][t][k][0] = 1;               for (int dep = m, c = t, j = k; dep; --dep) {                 s2[h][t][k][dep] = c;                 int d = dp[h][c][dep][j];                 j -= calc(d, c);                 c = d;               }             }       }     } else {       for (int i = 0; i < 3; ++i) {         s2[i][i][0][0] = 1;         s2[i][i][0][1] = i;       }     }     for (int h1 = 0; h1 < 3; ++h1)       for (int t1 = 0; t1 < 3; ++t1)         for (int i = 0; i < n; ++i)           if (s1[h1][t1][i][0]) {             for (int h2 = 0; h2 < 3; ++h2)               for (int t2 = 0; t2 < 3; ++t2)                 for (int j = 0; j < m; ++j)                   if (s2[h2][t2][j][0]) {                     long long cnt = f[k].c1[0] * i + f[k].c1[1] * j;                     cnt += f[k].c2[0][0] * calc(t1, h1) +                            f[k].c2[0][1] * calc(t1, h2) +                            f[k].c2[1][0] * calc(t2, h1) +                            f[k].c2[1][1] * calc(t2, h2);                     if (cnt == x) {                       for (int k = 1; k <= n; ++k) putchar(s1[h1][t1][i][k] + 65);                       putchar(  n );                       for (int k = 1; k <= m; ++k) putchar(s2[h2][t2][j][k] + 65);                       putchar(  n );                       return 0;                     }                   }           }     puts( Happy new year! );     return 0;   }   