#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
char a[309][309];
char b[309][309];
char cp[7][3]= {"1","CX","V","BY","AZ","2","H"}; //在一行说明他们转动后相同。
char dp[7][8]= {"1","1H","1H1","1H1H","1H1H1H","1H1H1","H"}; //以1和H为根本,转动。总会因为HH相遇而不需要操作,同理!yeshiruci
char sk[10];//不会出现八个以上的操作。
int cnt;
string s;
int m,n;
void work(char cmd)
{
for(int i=1; i<=m; i++)
for(int j=1; j<=n; j++)
{
if(cmd=='1')
b[j][i]=a[i][j];
if(cmd=='H')
b[m-i+1][j]=a[i][j];
}
if(cmd=='1')
swap(m,n);
for(int i=1; i<=m; i++)
for(int j=1; j<=n; j++)
a[i][j]=b[i][j];
}
void zh(char cmd)
{
for(int i=0; i<7; i++)
{
if(strchr(cp[i],cmd)!=NULL)//如果在cp中找不到,则返回NULL;
{
int len=strlen(dp[i]);
for(int j=0; j<len; j++)
{
if(cnt>0&&sk[cnt-1]==dp[i][j])//因为总会有重复的操作,所以只要有重复的一定要去掉前一个。
cnt--;
else
sk[cnt++]=dp[i][j];
if(cnt>=8)
cnt=0;
}
break;
}
}
}
int main()
{
while(cin>>m>>n)
{
getchar();
cnt=0;
for(int i=1;i<=m; i++)
cin>>a[i]+1;//使下标从一开始
getchar();
cin>>s;
for(int i=0; s[i]!='\0'; i++)
zh(s[i]);
for(int i=0; i<cnt; i++)
work(sk[i]);
cout<<m<<" "<<n<<endl;
for(int i=1; i<=m; i++)
{
for(int j=1; j<=n; j++)
cout<<a[i][j];//必须输出a,有可能没有操作。
cout<<endl;
}
}
return 0;
}