#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <string>
#include <cassert>

typedef long long ll;
typedef long double ld;

using namespace std;

const int MAXSIZE = 1 << 20;

int n, mask;
bool used[MAXSIZE];
string posl;

void dfs(int v, int level){
    if(used[v] || level == n){
        bool rs = (v == mask && level == n);
        if(rs){
            stack<char> ch;
            while(mask){
                if(mask & 1){
                    ch.push('A');
                } else {
                    ch.push('B');
                }
                mask >>= 1;
            }
            while(!ch.empty()){
                cout << ch.top();
                ch.pop();
            }
            cout << "\n" << posl;
            exit(0);
        }
        return;
    }
    used[v] = true;
    posl[level] = '2';
    dfs(v ^ (v >> 1), level + 1);
    posl[level] = '1';
    dfs(v ^ 1, level + 1);
    used[v] = false;
    return;
}

int main() {
#ifdef DEBUG
    freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
#else
    //freopen("test.in", "r", stdin);
    //freopen("test.out", "r", stdout);
#endif
    cin >> n;
    posl.resize(n);
    mask = 2;
    while(mask / 2 < n){
        mask *= 2;
    }
    for(mask = 2; mask < MAXSIZE; mask++){
        //cerr << "mask = " << mask << "\n";
        dfs(mask, 0);
    }
    return 0;
}
