#include <stdio.h>
#include <string.h>
#define maxn 1010
char s[5][5], c, s1[maxn];
int cases = 0, i, j, col, row, first = 1, bad;//bad=1表示越界溢出
void swap(char *a, char *b)
{
char t = *a;
*a = *b;
*b = t;
}
int panduan(int col, int row)//判断行列是否越界
{
if (col < 0 || col>4 || row < 0 || row>4)
return 1;
return 0;
}
void move(char c)
{
if (c == 'A')
{
if (!panduan(col - 1, row))
{
swap(&s[col][row], &s[col - 1][row]);
col--;
}
else bad = 1;
}
else if (c == 'B')
{
if (!panduan(col + 1, row))
{
swap(&s[col][row], &s[col + 1][row]);
col++;
}
else bad = 1;
}
else if (c == 'L')
{
if (!panduan(col, row - 1))
{
swap(&s[col][row], &s[col][row - 1]);
row--;
}
else bad = 1;
}
else if (c == 'R')
{
if (!panduan(col, row + 1))
{
swap(&s[col][row], &s[col][row + 1]);
row++;
}
else bad = 1;
}
}
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
while (1)
{
gets(s[0]);
if (s[0][0] == 'Z'&&s[0][1] == '\0') break;
bad = 0;
for (i = 1;i <= 4;i++)
gets(s[i]);
for (i = 0;i < 5;i++)
for (j = 0;j < 5;j++)
if (s[i][j] == ' ')
{//col,row分别保存空格所在行列
col = i;
row = j;
break;
}
while (1)
{
gets(s1);
int len = strlen(s1);
for (i = 0;i < len - 1;i++)
{
move(s1[i]);
if (bad) break;
}
if (bad) break;
if (s1[len - 1] == '0') break;
else move(s1[len - 1]);
}
if (first) first = 0;
else putchar('\n');
printf("Puzzle #%d:\n", ++cases);
if (bad) printf("This puzzle has no final configuration.\n");
else
{
for (i = 0;i < 5;i++)
{
for (j = 0;j < 5;j++)
{
if (j) putchar(' ');
putchar(s[i][j]);
}
putchar('\n');
}
}
}
return 0;
}