#include <stdio.h>
int n;
int h[256][256];
int main() {
	scanf("%d", &n);
	h[0][0] = 1;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < (1 << i); j++) {
			for (int k = 0; k < (1 << i); k++) {
				h[j + (1 << i)][k] = h[j][k];
				h[j][k + (1 << i)] = h[j][k];
				h[j + (1 << i)][k + (1 << i)] = -h[j][k];
			}
		}
	}
	printf("%d\n", (1 << n) - 1);
	for (int i = 1; i < (1 << n); i++) {
		for (int j = 0; j < (1 << n); j++) {
			if (h[i][j] == 1)printf("A");
			else printf("B");
		}
		printf("\n");
	}
}
#pragma GCC optimize("O3")

#include "bits/stdc++.h"

#define sz(x) (int)(x).size()
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n;
    cin >> n;
    cout << (1<<n)-1 << "\n";
    for(int i=1; i<=(1<<n)-1; i++) {
        for(int j=0; j<(1<<n); j++)
            cout << (__builtin_popcount(i & (j+1)) % 2 ? 'A' : 'B');
        cout << "\n";
    }

    return 0;
}
