#include<iostream>
#include<fstream>
#include<vector>
#include<cstring>
using namespace std;

int n, nrb, dest;
bool ver[10010];int ee;

vector<int> rez;

bool df(int nod, int pas) {
    if(nod == dest && pas == n) {
        return 1;
    }
    if(ver[nod])
        return 0;
    ver[nod] = 1;
    
    if(df(nod ^ 1, pas + 1)) {
        rez.push_back(1);
        return 1;
    }
    
    int newn = (nod ^ (nod / 2));
    if(newn >= (1<<nrb))
        newn -= (1<<nrb);
    
    if(df(newn, pas + 1)) {
        rez.push_back(2);
        return 1;
    }
    ver[nod] = 0;
    return 0;
}

void df2(int nod) {
    if(!ver[nod])
        return;
    ver[nod] = 0;
    
    df2(nod ^ 1);
    
    int newn = (nod ^ (nod / 2));
    if(newn >= (1<<nrb))
        newn -= (1<<nrb);
    df2(newn);
}

bool verr(int nr) {
    int nrp = 0;
    nrb = 0;
    memset(ver, 0, sizeof(ver));
    ee = 0;
    dest = nr;
    rez.clear();
    
    while(nr >= (1<<nrb))
        ++nrb;

    if(df(nr, 0)) {
        int i;
        for(i = nrb - 1; i >= 0; --i) {
            if(nr & (1<<i))
                cout << "A";
            else
                cout << "B";
        }
        cout << "\n";
        
        for(i = rez.size() - 1; i >= 0; --i)
            cout << rez[i];
        
        cout << "\n";
        df2(nr);
        return 1;
    }
    return 0;
}

int main() {
    int i;
    //freopen("ttt", "r", stdin);
    
    cin >> n;
    
    for(i = 1; i <= 10000; ++i)
        if(verr(i))
            break;
    
    return 0;
}
