#include <cstdio>

int n;

int main(){
	scanf("%d", &n);
	printf("%d\n", (1 << n) - 1);
	for(int i = 1; i < (1 << n); ++i){
		for(int j = 0; j < (1 << n); ++j)
			if(__builtin_popcount(i & j) & 1) putchar('A');
			else putchar('B');
		puts("");
	}
	return 0;
}
#include<iostream>
#include<algorithm>
#include<math.h>
#include<cstring>
#include<queue>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<string.h>
using namespace std;
long long int a[300001];
long long int b[300001];
long long int amax[200001];
string func0(string s);
string func1(string s);
string func2(string s);
int main() {
	
	int n;
	cin >> n;
	int bi[9] = { 1,2,4,8,16,32,64,128,256 };
	cout << bi[n] - 1 << endl;

	string ab[256], abold[256];

	int i, j;
	ab[0] = "AB";

	for (i = 2; i <= n; i++) {
		for (j = 0; j < 256; j++) {
			abold[j] = ab[j];
		}
		ab[0] = func0(abold[0]);
		for (j = 0; j < bi[i - 1] - 1; j++) {
			ab[j+1] = func1(abold[j]);
		}
		for (j = 0; j < bi[i - 1]-1; j++) {
			ab[j + bi[i - 1]] = func2(abold[j]);
		}
	}


	
	for (i = 0; i < bi[n]-1; i++) {
		cout << ab[i] << endl;
	}
	return 0;



}

string func0(string s) {
	return s + s;
}
string func1(string s) {
	int i;
	string t = "";
	for (i = 0; i < s.size(); i++) {
		if (s[i] == 'A') {
			t = t + "AA";
		}
		else if(s[i] == 'B') {
			t = t + "BB";
		}
	}
	return t;
}
string func2(string s) {

	int i;
	string t = "";
	for (i = 0; i < s.size(); i++) {
		if (s[i] == 'A') {
			t = t + "AB";
		}
		else if (s[i] == 'B') {
			t = t + "BA";
		}
	}
	return t;

}