#include<cstdio>
#include<algorithm>
using namespace std;
int line[8][8]={
{ 0, 2, 6,11,15,20,22},
{ 1, 3, 8,12,17,21,23},
{10, 9, 8, 7, 6, 5, 4},
{19,18,17,16,15,14,13},
{23,21,17,12, 8, 3, 1},
{22,20,15,11, 6, 2, 0},
{13,14,15,16,17,18,19},
{ 4, 5, 6, 7, 8, 9,10}
};
int rev[8]={ 5, 4, 7, 6, 1, 0, 3, 2};
int center[8]={ 6, 7, 8, 11, 12, 15, 16, 17};
int a[24];
char ans[1009];
int diff(int target)
{
int ans1=0;
for (int i=0;i<8;i++)
{
if (a[center[i]]!=target)
{
ans1++;
}
}
return ans1;
}
int f()
{
return min(diff(1),min(diff(2),diff(3)));
}
void move(int tmp){
int tmp1=a[line[tmp][0]];
for (int i=0;i<=5;i++)
{
a[line[tmp][i]]=a[line[tmp][i+1]];
}
a[line[tmp][6]]=tmp1;
}
bool dfs(int d,int maxd)
{
if (d+f()>maxd) return false;
if (f()==0){
ans[d]='\0';
return true;
}
for (int i=0;i<8;i++)
{
move(i);
ans[d]='A'+i;
if (dfs(d+1,maxd)) return true;
move(rev[i]);
}
}
int main()
{
while (scanf("%d",&a[0])&&a[0])
{
for (int i=1;i<24;i++){
scanf("%d",&a[i]);
if (!a[i]) return 0;
}
if (!f())
{
printf("No moves needed\n");
printf("%d\n",a[6]);
continue;
}
for (int i=1;;i++)
{
if (dfs(0,i)) break;
}
printf("%s\n",ans);
printf("%d\n",a[6]);
}
return 0;
}