#include<bits/stdc++.h>
using namespace std;
struct node{
int a[10][10],t;
string ans;
}a;
map<int,bool>m;
queue<node>q;
int cale(node x)
{
int ans=0;
for(int i=1;i<=4;i++) ans=ans*10+x.a[1][i];
for(int i=4;i;i--) ans=ans*10+x.a[2][i];
return ans;
}
int main()
{
int g=0;
for(int i=1;i<=4;i++) a.a[1][i]=i;
for(int i=4;i;i--) a.a[2][i]=4+(4-i+1);
for(int i=1;i<=8;i++)
{
int x;
cin>>x;
g=g*10+x;
}
if(g==12345678)
{
cout<<0<<'\n';
return 0;
}
a.ans="";a.t=0;
q.push(a);
m[12345678]=1;
while(q.size())
{
int f=0;
node x=q.front();
q.pop();
node y=x;
for(int i=1;i<=4;i++) swap(y.a[1][i],y.a[2][i]);
f=cale(y);
if(m[f]) continue;
y.ans+='A';
y.t++;
if(f==g)
{
cout<<y.t<<'\n';
cout<<y.ans;
return 0;
}
m[f]=1;
q.push(y);
y=x;
int a1=y.a[1][4],a2=y.a[2][4];
for(int i=4;i>1;i--) y.a[1][i]=y.a[1][i-1],y.a[2][i]=y.a[2][i-1];
y.a[1][1]=a1,y.a[2][1]=a2;
f=cale(y);
if(m[f]) continue;
y.ans+='B';
y.t++;
if(f==g)
{
cout<<y.t<<'\n';
cout<<y.ans;
return 0;
}
m[f]=1;
q.push(y);
y=x;
a1=y.a[1][2];
y.a[1][2]=y.a[2][2];y.a[2][2]=y.a[2][3];y.a[2][3]=y.a[1][3];
y.a[1][3]=a1;
f=cale(y);
if(m[f]) continue;
y.ans+='C';
y.t++;
if(f==g)
{
cout<<y.t<<'\n';
cout<<y.ans;
return 0;
}
m[f]=1;
q.push(y);
}
}