#include<cstdio>
#include<vector>
using namespace std;

int N, n, n_stiva, ap[1<<24], stiva[1<<24], pos[1<<24], cum;
vector < int > cic;

int next1 (int v, int n)
{
    return v^1;
}

int next2 (int v, int n)
{
    return v^(v>>1);
}

void U (int st, int dr)
{
    if (dr-st+1 == N)
    {
        for (int i= st; i<=dr; i++)
            cic.push_back (stiva[i]);
        cum = n;
    }
}

void dfs (int nod)
{
    ap[nod] = 1;
    stiva[++n_stiva] = nod;
    pos[nod] = n_stiva;

    if (ap[next1(nod, n)] == 0) dfs (next1(nod, n));
    else
    if (pos[next1(nod, n)]) U (pos[next1(nod, n)], n_stiva);
    
    if (ap[next2(nod, n)] == 0) dfs (next2(nod, n));
    else
    if (pos[next2(nod, n)]) U (pos[next2(nod, n)], n_stiva);
    
    pos[nod] = 0;
    n_stiva --;
}

int main()
{
//freopen ("input", "r", stdin);
//freopen ("output", "w", stdout);
scanf ("%d", &N);
for (n=1; n<=18; n++)
{
    for (int i=0;i<(1<<n); i++)
        if (i & (1<<(n-1)))
            dfs (i);
    for (int i=0;i<(1<<n); i++)
        ap[i] = 0;
}
if (cum)
{
    for (int i=cum-1; i>=0; i--)
        if (cic[0]&(1<<i)) printf ("A");
        else printf ("B");
    cic.push_back (cic[0]);
    printf ("\n");
    for (int i=0; i<cic.size()-1; i++)
        if (next1(cic[i], cum) == cic[i+1]) printf ("1");
        else printf ("2");
    printf ("\n");
}
else printf ("NO\n");
return 0;
}
