#include <bits/stdc++.h>
using namespace std;
int main()
{
char s[6][6];
int cnt=1;//循环次数
while(1){
first: int kx,ky;
int flagg=1;//判断操作是否超出范围
for(int i=1;i<=5;i++)
for(int j=1;j<=5;j++)
s[i][j]=' ';
// cout<<1111111<<endl;
for(int i=1;i<=5;i++){
int flag=0;
for(int j=1;j<=5;j++){
s[i][j]=getchar();
if(s[i][j]=='\n') flag=1;//判断输出了几个回车,有一个了的话,下面就不用getchar()去接收回车了
if (s[1][1]=='Z') return 0;//遇到Z停止
// cout<<kx<<" "<<ky<<endl;
if(s[i][j]=='\n')s[i][j]=' ';//将输入的回车变为空格
//cout<<s[5][5]<<endl;
if(s[i][j]==' ') {
kx=i,ky=j;
// cout<<kx<<" "<<ky<<endl;
}
}
if(flag==0) getchar();
}
char K;
while(cin>>K){
if(K=='A'){
swap(s[kx-1][ky],s[kx][ky]);
kx--;
if(kx<1) flagg=0;
}
else if(K=='B'){
swap(s[kx+1][ky],s[kx][ky]);
kx++;
if(kx>5) flagg=0;
}else if(K=='L'){
swap(s[kx][ky-1],s[kx][ky]);
ky--;
if(ky<1) flagg=0;
}else if(K=='R'){
swap(s[kx][ky+1],s[kx][ky]);
ky++;
if(ky>5) flagg=0;
}else if(K=='0'){
cout<<"Puzzle #"<<cnt++<<":"<<endl;
if(flagg==1){
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cout<<s[i][j]<<" ";}
cout<<endl;}
cout<<endl;
getchar();
goto first;
}else{
cout<<"This puzzle has no final configuration."<<endl;
getchar();
cout<<endl;
goto first;
}
}
}
}
return 0;
}