#include<iostream>
#include<fstream>
#include<string>
using namespace std;
#define null NULL;
typedef struct node
{
struct node * parent;//保存父节点
string content;//保存本节点的操作序列
int c[10];//保存本节点的状态
}node;
typedef struct sequence
{
node a[9000];
int top;
}sequence;
void init(sequence * s)
{
s->top=0;
}
void insert(sequence *s,node n)
{
for(int i=s->top;i>=1;i--)
{
s->a[i]=s->a[i-1];
}
s->top++;
s->a[0]=n;
}
node pop(sequence *s)
{
s->top--;
node n=s->a[s->top];
return n;
}
int main()
{
ifstream fin ("msquare.in");
ofstream fout ("msquare.out");
int i;
int target[10];
for(i=1;i<=8;i++)
{
fin>>target[i];
}
for(i=1;i<=8;i++)
{
if(target[i]!=i)
break;
}
if(i>8)
{
fout<<0<<endl;
fout<<endl;
return 0;
}
sequence s;
init(&s);
node a,b,c;
for(i=1;i<=8;i++)
{
a.c[i]=i;
b.c[i]=i;
c.c[i]=i;
}
a.parent=null;
a.content="A";
for(i=1;i<=4;i++)
{
int temp=a.c[i];
a.c[i]=a.c[9-i];
a.c[9-i]=temp;
}
b.parent=null;
b.content="B";
int temp[10];
for(i=1;i<=8;i++)
{
temp[i]=b.c[i];
}
b.c[1]=temp[4];
b.c[2]=temp[1];
b.c[3]=temp[2];
b.c[4]=temp[3];
b.c[5]=temp[6];
b.c[6]=temp[7];
b.c[7]=temp[8];
b.c[8]=temp[5];
c.parent=null;
c.content="C";
int temp2=c.c[2];
int temp3=c.c[3];
int temp6=c.c[6];
int temp7=c.c[7];
c.c[2]=temp7;
c.c[3]=temp2;
c.c[6]=temp3;
c.c[7]=temp6;
insert(&s,a);
insert(&s,b);
insert(&s,c);
bool t=true;
while(t)
{
node n=pop(&s);
/*fout<<n.content<<endl;
for(i=1;i<=8;i++)
{
fout<<n.c[i]<<' ';
}
fout<<endl;*/
for(i=1;i<=8;i++)
{
if(n.c[i]!=target[i])
{
break;
}
}
if(i>8)
{
fout<<n.content.length()<<endl;
fout<<n.content<<endl;
return 0;
}
node a,b,c;
a.parent=&n;
a.content=a.parent->content+"A";
for(i=1;i<=8;i++)
{
a.c[i]=a.parent->c[i];
}
for(i=1;i<=4;i++)
{
int temp=a.c[i];
a.c[i]=a.c[9-i];
a.c[9-i]=temp;
}
b.parent=&n;
b.content=b.parent->content+"B";
for(i=1;i<=8;i++)
{
b.c[i]=b.parent->c[i];
}
int temp[10];
for(i=1;i<=8;i++)
{
temp[i]=b.c[i];
}
b.c[1]=temp[4];
b.c[2]=temp[1];
b.c[3]=temp[2];
b.c[4]=temp[3];
b.c[5]=temp[6];
b.c[6]=temp[7];
b.c[7]=temp[8];
b.c[8]=temp[5];
c.parent=&n;
c.content=c.parent->content+"C";
for(i=1;i<=8;i++)
{
c.c[i]=c.parent->c[i];
}
int temp2=c.c[2];
int temp3=c.c[3];
int temp6=c.c[6];
int temp7=c.c[7];
c.c[2]=temp7;
c.c[3]=temp2;
c.c[6]=temp3;
c.c[7]=temp6;
insert(&s,a);
insert(&s,b);
insert(&s,c);
}
return 0;
}