#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = (l); i <= (r); i++)
#define per(i, r, l) for (int i = (r); i >= (l); i--)
#define mem(a, b) memset(a, b, sizeof a)
#define For(i, l, r) \
for (int i = (l), i##e = (r); i < i##e; i++)
#define pb push_back
#define eb emplace_back
#define all(x) (x).begin(), (x).end()
#define SZ(x) int((x).size())
using namespace std;
string s;
map<string, string> pre;
vector<string> ans;
// Function to explore all possible swaps
void bfs(int n)
{
string q[448];
int l = 0, r = 0;
for (int k = 0; k <= (n < 8); k++) {
for (int i = 0; i <= n - 2; i++) {
string s
= string(i, 'A') + string(n - 2 - i, 'B');
s.insert(k, "..");
q[r++] = s, pre[s] = "";
}
}
while (l < r) {
string u = q[l++];
int k = u.find('.');
for (int i = 0; i < n - 1; i++) {
if (i <= k - 2 || i >= k + 2) {
string v = u;
swap(v[i], v[k]);
swap(v[i + 1], v[k + 1]);
if (!pre.count(v))
pre[v] = u, q[r++] = v;
}
}
}
}
void solve(int l, int r)
{
auto t = s.substr(l, r - l);
while (pre[t] != "") {
t = pre[t];
ans.pb(s.substr(0, l) + t + s.substr(r));
}
s = s.substr(0, l) + t + s.substr(r);
}
int main()
{
int n = 3;
s = "AB..BA";
// If the length is 2, then we only have empty
// boxes. So, 0 moves are required
if (n == 1) {
cout << "0\n";
return 0;
}
// If the length is less than 4, we extend the
// search by considering configurations of length
// n*2
else if (n < 4) {
bfs(n * 2);
if (!pre.count(s))
cout << "-1\n", exit(0);
solve(0, n * 2);
}
else {
int k = s.find('.');
if (k > 1) {
swap(s[k], s[k & 1]);
swap(s[k + 1], s[(k & 1) + 1]);
ans.pb(s);
}
bfs(8);
solve(0, 8);
int l = 0, r = n * 2;
while (r - l > 8) {
if (s[l + 2] == 'A' && s[l + 3] == 'A') {
s[l] = s[l + 1] = 'A',
s[l + 2] = s[l + 3] = '.';
ans.pb(s), l += 2;
}
else {
for (int i = l + 2; i < l + 8; i += 2) {
s[i - 2] = s[i], s[i - 1] = s[i + 1];
s[i] = s[i + 1] = '.';
ans.pb(s);
}
s[l + 6] = s[r - 2], s[l + 7] = s[r - 1];
s[r - 2] = s[r - 1] = '.';
ans.pb(s);
s[r - 2] = s[l + 4], s[r - 1] = s[l + 5];
s[l + 4] = s[l + 5] = '.';
ans.pb(s), r -= 2;
}
solve(l, l + 8);
}
}
cout << SZ(ans) << "\n";
for (auto t : ans)
cout << t << '\n';
}