#include <bits/stdc++.h>
#define fin cin
#define fout cout

using namespace std;

//ifstream fin("input.txt");
//ofstream fout("output.txt");

vector<pair<int, int> > gr[110];
vector<pair<int, int> > global_v;
int n, pw;
bool flag;


string bin(int x)
{
    string res;
    for (int i = 0; i < pw; i++)
    {
        if (x % 2 == 0)
            res += 'B';
        else
            res += 'A';
        x /= 2;
    }
    reverse(res.begin(), res.end());
    return res;
}


void dfs(int ii, vector<pair<int, int> > v, int from, int k)
{
    v.push_back(make_pair(ii, k));
    if (ii == from)
    {
        for (int i = 0; i < v.size(); i++)
            for (int j = i + 1; j < v.size(); j++)
                if (!((i == 0) && (j == n) && (v.size() == n + 1)) && (v[i].first == v[j].first))
                    return;
        if (v.size() == n + 1)
        {
            assert(v[0].first == v[n].first);
            global_v = v;
            assert(global_v[0].first == global_v[n].first);
            flag = true;
            return;
        }
    }
    for (int i = 0; i < v.size(); i++)
        for (int j = i + 1; j < v.size(); j++)
            if (v[i].first == v[j].first)
                return;
    for (int i = 0; i < gr[ii].size(); i++)
    {
        int to = gr[ii][i].first;
        dfs(to, v, from, gr[ii][i].second);
    }
}


bool ans()
{
    for (int i = 0; i < 1 << pw; i++)
    {
        int j = i;
        if (j % 2 == 0)
            j++;
        else
            j--;
        gr[i].clear();
        gr[i].push_back(make_pair(j, 1));
        vector<int> v;
        assert(v.size() == 0);
        j = i;
        for (int t = 0; t < pw; t++)
        {
            v.push_back(j % 2);
            j /= 2;
        }
        reverse(v.begin(), v.end());
        vector<int> v2;
        assert(v2.size() == 0);
        v2.push_back(1);
        for (int j = 1; j < v.size(); j++)
            v2.push_back(v[j] ^ v[j - 1]);
        int res = 0;
        for (int j = 0; j < v2.size(); j++)
            res = res * 2 + v2[j];
        gr[i].push_back(make_pair(res, 2));
    }
    flag = false;
    vector<pair<int, int> > vv;
    for (int i = 0; i < 1 << pw; i++)
    {
        assert(vv.size() == 0);
        dfs(i, vv, i, 0);
    }
    if (flag)
    {
        assert(global_v[0].first == global_v[n].first);
        assert(global_v.size() == n + 1);
        fout << bin(global_v[0].first) << endl;
        for (int i = 1; i < global_v.size(); i++)
            fout << global_v[i].second;
        fout << endl;
        return true;
    }
    return false;
}


int main()
{
    fin >> n;
    for (pw = 1; pw < 10; pw++)
        if (ans())
            break;
    return 0;
}
