#include <cstdio>
#include <ctime>

#define MAXN 100000
#define MAXLEN 100000
#define MAXM 1000000

int N;

void init()
{
	scanf("%d", &N);
}

int L;
char str[MAXLEN+5];
char tempStr[MAXLEN+5];

void doOp1() { return; str[L-1] = (str[L-1] == 'A') ? 'B' : 'A'; }
void doOp2() { return; for(int i=1; i<L; i++) tempStr[i] = (str[i]==str[i-1]) ? 'B' : 'A'; for(int i=1; i<L; i++) str[i]=tempStr[i]; }

int LEN;
int op1(int a) { return a^1; }
int op2(int a) { return ( ~ (a ^ ((a>>1) | (1<<(LEN-1))))) & ((1<<LEN)-1); }

int initA;
bool u[MAXM];

int seq[MAXN];

void printAsText(int a)
{
	int rev=0;
	for(int i=0; i<LEN; i++) { rev = (rev<<1)|(a&1); a=(a>>1); }
	//for(int i=0; i<LEN; i++) { printf("%c", 'A'+(rev&1)); rev=(rev>>1); }
	for(int i=0; i<LEN; i++) { printf("%c", ((rev&1) == 1) ? 'B' : 'A'); rev=(rev>>1); }
	printf("\n");
}

bool dfs(int a, int n)
{
	//printf("%d %d\n", a, n);
	if(a == initA and n==N)
	{
		return true;
	}
	
	if((clock() > 900) or n>=N or u[a]) return false;
	u[a] = true;
	
	if(dfs(op2(a), n+1)) { seq[n]=2; return true; }
	if(dfs(op1(a), n+1)) { seq[n]=1; return true; }
	
	u[a] = false;
	return false;
}

void solveStupid()
{
	int lim=54;
	int minLen=2;
	while((1<<(minLen-1)) < N) minLen++;
	for(LEN=minLen; LEN<19; LEN++)
	{
		if(clock() > 900) { printf("NO\n"); return; }
		for(int a=0; a<lim and a<2; a++)
		{
			initA = a;
			if(dfs(a,0))
			{
				printAsText(a);
				for(int i=0; i<N; i++) printf("%d", seq[i]); printf("\n");
				//for(int i=0; i<N; i++) initA = (seq[i]==1) ? op1(initA) : op2(initA);
				//if(initA != a) printf("BOLLOCKS!\n");
				return;
			}
		}
	}
	printf("NO\n");
}

void solve()
{
	if(N==2)
	{
		printf("AA\n11\n");
		return;
	}
	if(N>3 and (N&1)!=0)
	{
		solveStupid();
		return;
	}
	//int logN = 32 - __builtin_clz(N-1);
	int logN = 31 - __builtin_clz(N);
	//printf("%d\n", logN);
	
	int len = (1<<(logN-1)) + 2;
	L=len;
	
	char lastChar = ((N&1) == 0) ? 'A' : 'A';
	for(int i=0; i<L; i++) str[i]='A'; str[L-1]=lastChar; str[L]='\0';
	
	for(int i=0; i<len-1; i++) printf("A"); printf("%c\n", lastChar);
	
	int onesNeeded = N - (1<<logN);
	for(int i=0; i<(1<<logN); i++)
	{
		printf("2"); doOp2();
		if(onesNeeded) { printf("1"); doOp1(); onesNeeded--; }
	}
	printf("\n");
	//printf("%s\n", str);
}

//lld
int main()
{
	//printf("%d\n", 1<<(32 - __builtin_clz(2-1)));
	//N=1581;
	//freopen("abwords.out", "w", stdout);
	init();
	
	solve();
	
	return 0;
}
