#include <iostream>
#include <algorithm>
using namespace std;
int *H, n;
unsigned long long tot = 0;
string s[10000000];
void work2(int *A, int *B, int A_num, int B_num){
if (A_num == 0 && B_num == 0)
{
return ;
}
int maxx = -1, maxp;
int *a, *b;
a = new int[n + 10];
b = new int[n + 10];
char ch;
for (int i = 1;i <= A_num;i++) {
if (A[i] > maxx)
{
maxx = A[i];
maxp = i;
ch = 'A';
}
}
for (int i = 1;i <= B_num;i++) {
if (B[i] > maxx)
{
maxx = B[i];
maxp = i;
ch = 'B';
}
}
int sum = 0, num = 0;
if (ch == 'A'){
reverse(B + 1, B + B_num + 1);
int i;
for (int j = maxp + 1;j <= A_num;j++)
{
a[j - maxp] = A[j];
sum++;
}
for (i = 1;i <= B_num;i++)
{
b[i] = B[i];
num++;
}
for (int j = maxp - 1;j >= 1;j--)
{
b[i + j + 1 - maxp] = A[j];
s[tot] = "A B";
num++;
tot++;
}
s[tot] = "A C";
tot++;
}
else if (ch == 'B'){
reverse(A + 1, A + A_num + 1);
int i;
for (int j = maxp + 1;j <= B_num;j++)
{
b[j - maxp] = B[j];
num++;
}
for (i = 1;i <= A_num;i++)
{
a[i] = A[i];
sum++;
}
for (int j = maxp - 1;j >= 1;j--)
{
a[i + j + 1 - maxp] = B[j];
s[tot] = "B A";
sum++;
tot++;
}
s[tot] = "B C";
tot++;
}
reverse(a + 1, a + sum + 1);
reverse(b + 1, b + num + 1);
work2(a, b, sum, num);
}
void work(int *a){
int *b, *c;
b = new int[n + 10];
c = new int[n + 10];
int maxx = -1, maxp;
for (int i = 1;i <= n;i++){
if (maxx < a[i])
{
maxx = a[i];
maxp = i;
}
}
int sum = 0, num = 0;
for (int i = 1;i < maxp;i++){
s[tot] = "A B";
b[i] = a[i];
sum++;
tot++;
}
s[tot] = "A C";
tot++;
for (int i = maxp + 1;i <= n;i++){
c[i - maxp] = a[i];
num++;
}
reverse(b + 1, b + sum + 1);
reverse(c + 1, c + num + 1);
work2(c, b, num, sum);
}
int main(){
cin >> n;
H = new int[n + 10];
for (int i = 1;i <= n;i++){
cin >> H[i];
}
work(H);
cout << tot << endl;
for (int i = 0;i < tot;i++)
{
cout << s[i] << endl;
}
return 0;
}