#include<bits/stdc++.h>
using namespace std;
int a[10][10];
struct node{
int b[10][10],cnt;
char d[10001];
}c,e,f,g;
void bfs()
{
queue<node>q;
for(int i=1;i<=2;i++)
for(int j=1;j<=4;j++)
c.b[i][j]=a[i][j];
c.cnt=0;
q.push(c);
while(!q.empty())
{
c=q.front();
q.pop();
if(c.b[1][1]==1&&c.b[1][2]==2&&c.b[1][3]==3&&c.b[1][4]==4&&c.b[2][1]==8&&c.b[2][2]==7&&c.b[2][3]==6&&c.b[2][4]==5)
{
cout<<c.cnt<<endl;
for(int i=1;i<=c.cnt;i++) cout<<c.d[i];
return;
}
for(int i=1;i<=2;i++)
for(int j=1;j<=4;j++)
e.b[i][j]=c.b[abs(i-3)][j];
e.cnt=c.cnt+1;
for(int i=1;i<e.cnt;i++) e.d[i]=c.d[i];
e.d[e.cnt]='A';
q.push(e);
f.b[1][1]=c.b[1][4];
f.b[2][1]=c.b[2][4];
for(int i=1;i<=2;i++)
for(int j=2;j<=4;j++)
f.b[i][j]=c.b[i][j-1];
f.cnt=c.cnt+1;
for(int i=1;i<f.cnt;i++) f.d[i]=c.d[i];
f.d[f.cnt]='B';
q.push(f);
g.b[1][1]=c.b[1][1];
g.b[2][1]=c.b[2][1];
g.b[1][2]=c.b[2][2];
g.b[2][2]=c.b[2][3];
g.b[1][3]=c.b[1][2];
g.b[2][3]=c.b[1][3];
g.b[1][4]=c.b[1][4];
g.b[2][4]=c.b[2][4];
g.cnt=c.cnt+1;
for(int i=1;i<g.cnt;i++) g.d[i]=c.d[i];
g.d[g.cnt]='C';
q.push(g);
}
}
int main()
{
cin>>a[1][1]>>a[1][2]>>a[1][3]>>a[1][4]>>a[2][4]>>a[2][3]>>a[2][2]>>a[2][1];
bfs();
return 0;
}