#include <cstdio>
#include <vector>
#include <stack>
#define hkey 666013
using namespace std;

int n;
int currentWordLength;
vector <int> H[hkey];
stack <int> answer;
int predefined[100] = {0,0,2,3,3,5,4,5,4,9,6,9,6,9,6,9,6,17,10,17,10,17,10,17,10,17,10,17,10,17,10,17,10};

int applyChangeR1(int word)
{
    int aux;
    if (word&1) aux = word - 1;
    else aux = word + 1;
    return aux;
}

int applyChangeR2(int word)
{
    int aux = 0;
    for (int i=currentWordLength-2;i>=0;i--)
    {
        int let1 = (word&(1<<i)) != 0;
        int let2 = (word&(1<<i+1)) != 0;
        if (let1 == let2) aux |= 1<<i;
        else aux &= 0xffffffff - 1<<i;
    }
    return aux;
}

void Hinsert(int x)
{
    H[x%hkey].push_back(x);
}

bool Hcheck(int x)
{
    int SV = x%hkey;
    for (vector <int> :: iterator it = H[SV].begin();it != H[SV].end();it++)
    {
        if (*it == x) return true;
    }
    return false;
}

void Hdelete(int x)
{
    int SV = x%hkey;
    for (vector <int> :: iterator it = H[SV].begin();it != H[SV].end();it++)
    {
        if (*it == x) 
        {
            H[SV].erase(it);
            return;
        }
    }
}

bool dfs(int conf,int lev)
{
    if (lev == n && conf == 0) return true;
    int C1 = applyChangeR1(conf);
    if (!Hcheck(C1))
    {
        Hinsert(C1);
        if (dfs(C1,lev+1))
        {
            answer.push(1);
            return true;
        }
        Hdelete(C1);
    }
    int C2 = applyChangeR2(conf);
    if (!Hcheck(C2))
    {
        Hinsert(C2);
        if (dfs(C2,lev+1))
        {
            answer.push(2);
            return true;
        }
        Hdelete(C2);
    }
    return false;
}

int main()
{
    scanf("%d",&n);
    
    if (predefined[n] != 0)
    {
        currentWordLength = predefined[n];
        if (dfs(0,0))
        {
            for (int i=1;i<=currentWordLength;i++) printf("A");
            printf("\n");
            while (!answer.empty())
            {
                printf("%d",answer.top());
                answer.pop();
            }
            printf("\n");
            return 0;
        }
        for (int i=0;i<hkey;i++) H[i].clear();
        return 0;
    }
    for (currentWordLength=2;currentWordLength<=n;currentWordLength++)
    {
        if ((1<<(currentWordLength-1)) >= n) break;
    }
    for (;currentWordLength <= 17;currentWordLength++)
    {
        if (dfs(0,0))
        {
            for (int i=1;i<=currentWordLength;i++) printf("A");
            printf("\n");
            while (!answer.empty())
            {
                printf("%d",answer.top());
                answer.pop();
            }
            printf("\n");
            return 0;
        }
        for (int i=0;i<hkey;i++) H[i].clear();
    }
    printf("NO\n");
    return 0;
}