#include <iostream>
#include <queue>
#include <cstdio>
#include <string>
#include <vector>
using namespace std;
string s;
vector<string> v;
bool check (string str) {
for (int i = 0; i < 101; i ++) {
if (v[i] == str) {
return false;
}
}
return true;
}
struct Node {
string value;
string ans;
int data;
};
int main () {
for (int i = 0; i < 8; i ++) {
cin >> s[i];
}
queue<Node> q;
v.push_back("12348765");
q.push({"12348765", "", 0});
while (!q.empty()) {
Node p = q.front();
q.pop();
for (int j = 1; j <= 3; j ++) {
Node new_p = p;
new_p.ans = p.ans;
if (j == 1) {
for (int i = 0; i < 4; i ++) {
swap(new_p.value[i], new_p.value[i + 4]);
}
new_p.ans += 'A';
}
if (j == 2) {
char c[2] = {new_p.value[3], new_p.value[7]};
for (int i = 3; i >= 0; i --) {
new_p.value[i] = new_p.value[i - 1];
new_p.value[i + 4] = new_p.value[i + 3];
}
new_p.value[0] = c[0];
new_p.value[4] = c[1];
new_p.ans += 'B';
}
if (j == 3) {
char c = new_p.value[6];
new_p.value[6] = new_p.value[2];
new_p.value[2] = new_p.value[1];
new_p.value[1] = new_p.value[5];
new_p.value[5] = c;
new_p.ans += 'C';
}
if (check(new_p.value)) {
if (new_p.value == s) {
cout << new_p.ans.size() << endl;
cout << new_p.ans;
return 0;
}
new_p.data = p.data + 1;
q.push(new_p);
v.push_back(new_p.value);
}
}
}
return 0;
}