/*   Author: QAQAutoMaton   Lang: C++   Code: C.cpp   Mail: lk@qaq-am.com   Blog: https://www.qaq-am.com/   */   #include<bits/stdc++.h>   #define debug(...) fprintf(stderr,__VA_ARGS__)   #define DEBUG printf( Passing [%s] in LINE %d n ,__FUNCTION__,__LINE__)   #define Debug debug( Passing [%s] in LINE %d n ,__FUNCTION__,__LINE__)   #define all(x) x.begin(),x.end()   #define x first   #define y second   using namespace std;   typedef unsigned uint;   typedef long long ll;   typedef unsigned long long ull;   typedef complex<double> cp;   typedef pair<int,int> pii;   int inf;   const double eps=1e-8;   const double pi=acos(-1.0);   template<class T,class T2>int chkmin(T &a,T2 b){return a>b?a=b,1:0;}   template<class T,class T2>int chkmax(T &a,T2 b){return a<b?a=b,1:0;}   template<class T>T sqr(T a){return a*a;}   template<class T,class T2>T mmin(T a,T2 b){return a<b?a:b;}   template<class T,class T2>T mmax(T a,T2 b){return a>b?a:b;}   template<class T>T aabs(T a){return a<0?-a:a;}   template<class T>int dcmp(T a,T b){return a>b;}   template<int *a>int cmp_a(int x,int y){return a[x]<a[y];}   template<class T>bool sort2(T &a,T &b){return a>b?swap(a,b),1:0;}   #define min mmin   #define max mmax   #define abs aabs   struct __INIT__{    __INIT__(){     fill((unsigned char*)&inf,(unsigned char*)&inf+sizeof(inf),0x3f);    }   }__INIT___;   namespace io {    const int SIZE = (1 << 21) + 1;    char ibuf[SIZE], *iS, *iT, obuf[SIZE], *oS = obuf, *oT = oS + SIZE - 1, c, qu[55]; int f, qr;    // getchar    #define gc() (iS == iT ? (iT = (iS = ibuf) + fread (ibuf, 1, SIZE, stdin), (iS == iT ? EOF : *iS ++)) : *iS ++)    // print the remaining part    inline void flush () {     fwrite (obuf, 1, oS - obuf, stdout);     oS = obuf;    }    // putchar    inline void putc (char x) {     *oS ++ = x;     if (oS == oT) flush ();    }    template<typename A>    inline bool read (A &x) {     for (f = 1, c = gc(); c <  0  || c >  9 ; c = gc()) if (c ==  - ) f = -1;else if(c==EOF)return 0;     for (x = 0; c <=  9  && c >=  0 ; c = gc()) x = x * 10 + (c & 15); x *= f;     return 1;    }    inline bool read (char &x) {     while((x=gc())==   ||x==  n  || x==  r );     return x!=EOF;    }    inline bool read(char *x){     while((*x=gc())==  n  || *x==   ||*x==  r );     if(*x==EOF)return 0;     while(!(*x==  n ||*x==   ||*x==  r ||*x==EOF))*(++x)=gc();     *x=0;     return 1;    }    template<typename A,typename ...B>    inline bool read(A &x,B &...y){     return read(x)&&read(y...);    }    template<typename A>    inline bool write (A x) {     if (!x) putc ( 0 ); if (x < 0) putc ( - ), x = -x;     while (x) qu[++ qr] = x % 10 +  0 ,  x /= 10;     while (qr) putc (qu[qr --]);     return 0;    }    inline bool write (char x) {     putc(x);     return 0;    }    inline bool write(const char *x){     while(*x){putc(*x);++x;}     return 0;    }    inline bool write(char *x){     while(*x){putc(*x);++x;}     return 0;    }    template<typename A,typename ...B>    inline bool write(A x,B ...y){     return write(x)||write(y...);    }    //no need to call flush at the end manually!    struct Flusher_ {~Flusher_(){flush();}}io_flusher_;   }   using io :: read;   using io :: putc;   using io :: write;   char s[100005];   int p[1005],q[1005],rp[1005];   int t1,t2,t3,t4,t5,t6;   int a[1005][1005],b[1005][1005];   int v[4];   signed main(){   #ifdef QAQAutoMaton     freopen( C.in , r ,stdin);    freopen( C.out , w ,stdout);   #endif    int t;    read(t);    for(;t;--t){     int n,m;     read(n,m);     for(int i=0;i<n;++i)for(int j=0;j<n;++j){      read(a[i][j]);      --a[i][j];     }     read(s+1);     pii x={1,0},y={2,0},z={3,0};     for(int i=1;i<=m;++i){      switch(s[i]){       case  R :++y.y;break;       case  L :--y.y;break;       case  D :++x.y;break;       case  U :--x.y;break;       case  I :swap(y,z);break;       case  C :swap(x,z);break;      }     }     ((x.y%=n)+=n)%=n;     ((y.y%=n)+=n)%=n;     ((z.y%=n)+=n)%=n;     for(int i=0;i<n;++i){      for(int j=0;j<n;++j){       v[1]=i;v[2]=j;v[3]=a[i][j];       b[(v[x.x]+x.y)%n][(v[y.x]+y.y)%n]=(v[z.x]+z.y)%n;      }     }     for(int i=0;i<n;++i)for(int j=0;j<n;++j)write(b[i][j]+1,j==n-1?  n :   );     putc(  n );    }    return 0;   }