#include<iostream>
#include<queue>
#include<string>
#include<set>
#include<cstdio>
using namespace std;
struct node{
string s,step;
int dis;
};
queue<node>q;
set<string>st;
string s="0",u,step,_next="012345678";//next存变换过程
int d[3][9]={
{
0,
5,6,7,8,
1,2,3,4
},
{
0,
4,1,2,3,
8,5,6,7,
},
{
0,
1,6,2,4,
5,7,3,8
}
};
int main(){
int i,j,dis;
char c;
for(i=0;i<8;++i){
cin>>c;
s+=c;
}
swap(s[5],s[8]);
swap(s[6],s[7]);
if(s=="012348765"){
printf("0");
return 0;
}
q.push({"012348765","",0});
st.insert("012348765");
while(!q.empty()){
u=q.front().s;//取出队首node的操作码
step=q.front().step;
dis=q.front().dis+1;//步数
q.pop();
for(i=0;i<3;++i){
for(j=1;j<9;++j){
_next[j]=u[d[i][j]];
}
if(st.count(_next)){
continue;
}
if(_next==s){
printf("%d\n",dis);
cout<<step<<char('A'+i);
return 0;
}
q.push({_next,step+char('A'+i),dis});
st.insert(_next);
}
}
}