/*
TASK:lab
LANG:C
*/
#include <stdio.h>
#include <stdlib.h>

 struct lab
  {
   long x,y,z,k1,k2;
  }tmp,t1,t2,pom;

 long n,rx,ry,rz,jx,jy,jz,s,e,c1,c2,cnt;
 long marked[40][40][40][10][10];
 long q[640001];
 long d[40][40][40];
 long g[40][40][40];
 long coef[8];
 char str[64];
// FILE *f;

 void decode (long w)
  {
   tmp.k2=w/coef[4];
   w-=tmp.k2*coef[4];
   tmp.k1=w/coef[3];
   w-=tmp.k1*coef[3];
   tmp.z=w/coef[2];
   w-=tmp.z*coef[2];
   tmp.y=w/coef[1];
   w-=tmp.y*coef[1];
   tmp.x=w/coef[0];
   w-=tmp.x*coef[0];
  }

 long code (struct lab o)
  {
   long r;
   r=0;
   r+=coef[0]*o.x;
   r+=coef[1]*o.y;
   r+=coef[2]*o.z;
   r+=coef[3]*o.k1;
   r+=coef[4]*o.k2;
   return r;
  }
  
 void back (struct lab o)
  {
   cnt++;
   if (o.x==rx && o.y==ry && o.z==rz)
    {
     printf("%ld\n",cnt-1);
     return;
    }
   decode(marked[o.x][o.y][o.z][o.k1][o.k2]);
   back(tmp);
   t1=o;
   decode(marked[o.x][o.y][o.z][o.k1][o.k2]);
   t2=tmp;
   if (t1.x!=t2.x)
    if (t1.x==t2.x+1)
     printf("X");
      else
       printf("U");
   if (t1.y!=t2.y)
    if (t1.y==t2.y+1)
     printf("Y");
      else
       printf("V");
   if (t1.z!=t2.z)
    if (t1.z==t2.z+1)
     printf("Z");
      else
       printf("W");
   if (t1.k1!=t2.k1)
    printf("%c",(char)(t2.k1+65));
   if (t1.k2!=t2.k2)
    printf("%c",(char)(t2.k2+65));
  }

 int main ()
  {
   long i,j,k,o,em,v,u;
//   f=fopen("l.in","r");
   scanf("%ld",&n);
   for (i=0;i<n;i++)
    for (j=0;j<n;j++)
     for (k=0;k<n;k++)
      for (v=0;v<10;v++)
       for (u=0;u<10;u++)
        marked[i][j][k][v][u]=-2;
   coef[0]=1;
   coef[1]=n;
   coef[2]=n*n;
   coef[3]=n*n*n;
   coef[4]=n*n*n*10;
   coef[5]=n*n*n*10*10;
   scanf("%ld%ld%ld",&rx,&ry,&rz);
   scanf("%ld%ld%ld",&jx,&jy,&jz);
   rx--;
   ry--;
   rz--;
   jx--;
   jy--;
   jz--;
   scanf("%s",&str);
   c1=(long)(str[0]-65);
   c2=(long)(str[1]-65);
   for (j=0;j<n;j++)
    for (i=0;i<n;i++)
     {
      scanf("%s",&str);
      for (k=0;k<n;k++)
       g[i][k][j]=(long)(str[k]-65);
     }
   for (j=0;j<n;j++)
    for (i=0;i<n;i++)
     {
      scanf("%s",&str);
      for (k=0;k<n;k++)
       if (str[k]!='O')
        d[i][k][j]=(long)(str[k]-65);
         else
          d[i][k][j]=16;
     }
   s=e=1;
   tmp.x=rx;
   tmp.y=ry;
   tmp.z=rz;
   tmp.k1=c1;
   tmp.k2=c2;
   q[e]=code(tmp);
   marked[tmp.x][tmp.y][tmp.z][tmp.k1][tmp.k2]=-1;
   while (s!=e+1)
    {
     decode(q[s]);
     if (tmp.x==jx && tmp.y==jy && tmp.z==jz)
      break;     
     em=q[s];
     o=d[tmp.x][tmp.y][tmp.z];
//
     if (o!=16 && marked[tmp.x][tmp.y][tmp.z][tmp.k1][o]==-2)
      {
       pom=tmp;
       pom.k2=o;
       q[++e]=code(pom);
       if (e==640000)
        e=0;
       marked[tmp.x][tmp.y][tmp.z][tmp.k1][o]=em;
      }
     if (o!=16 && marked[tmp.x][tmp.y][tmp.z][o][tmp.k2]==-2)
      {
       pom=tmp;
       pom.k1=o;       
       q[++e]=code(pom);
       if (e==640000)
        e=0;
       marked[tmp.x][tmp.y][tmp.z][o][tmp.k2]=em;
      }
// ..
     if (tmp.x!=n-1 && marked[tmp.x+1][tmp.y][tmp.z][tmp.k1][tmp.k2]==-2
     && (g[tmp.x+1][tmp.y][tmp.z]==tmp.k1 || g[tmp.x+1][tmp.y][tmp.z]==tmp.k2))
      {
       pom=tmp;
       pom.x=tmp.x+1;
       q[++e]=code(pom);
       if (e==640000)
        e=0;
       marked[tmp.x+1][tmp.y][tmp.z][tmp.k1][tmp.k2]=em;
      }
     if (tmp.x!=0 && marked[tmp.x-1][tmp.y][tmp.z][tmp.k1][tmp.k2]==-2
     && (g[tmp.x-1][tmp.y][tmp.z]==tmp.k1 || g[tmp.x-1][tmp.y][tmp.z]==tmp.k2))
      {
       pom=tmp;
       pom.x=tmp.x-1;
       q[++e]=code(pom);
       if (e==640000)
        e=0;
       marked[tmp.x-1][tmp.y][tmp.z][tmp.k1][tmp.k2]=em;
      }
//
     if (tmp.y!=n-1 && marked[tmp.x][tmp.y+1][tmp.z][tmp.k1][tmp.k2]==-2
     && (g[tmp.x][tmp.y+1][tmp.z]==tmp.k1 || g[tmp.x][tmp.y+1][tmp.z]==tmp.k2))
      {
       pom=tmp;
       pom.y=tmp.y+1;
       q[++e]=code(pom);
       if (e==640000)
        e=0;
       marked[tmp.x][tmp.y+1][tmp.z][tmp.k1][tmp.k2]=em;
      }
     if (tmp.y!=0 && marked[tmp.x][tmp.y-1][tmp.z][tmp.k1][tmp.k2]==-2
     && (g[tmp.x][tmp.y-1][tmp.z]==tmp.k1 || g[tmp.x][tmp.y-1][tmp.z]==tmp.k2))
      {
       pom=tmp;
       pom.y=tmp.y-1;
       q[++e]=code(pom);
       if (e==640000)
        e=0;
       marked[tmp.x][tmp.y-1][tmp.z][tmp.k1][tmp.k2]=em;
      }
//
     if (tmp.z!=n-1 && marked[tmp.x][tmp.y][tmp.z+1][tmp.k1][tmp.k2]==-2
     && (g[tmp.x][tmp.y][tmp.z+1]==tmp.k1 || g[tmp.x][tmp.y][tmp.z+1]==tmp.k2))
      {
       pom=tmp;
       pom.z=tmp.z+1;
       q[++e]=code(pom);
       if (e==640000)
        e=0;
       marked[tmp.x][tmp.y][tmp.z+1][tmp.k1][tmp.k2]=em;
      }
     if (tmp.z!=0 && marked[tmp.x][tmp.y][tmp.z-1][tmp.k1][tmp.k2]==-2
     && (g[tmp.x][tmp.y][tmp.z-1]==tmp.k1 || g[tmp.x][tmp.y][tmp.z-1]==tmp.k2))
      {
       pom=tmp;
       pom.z=tmp.z-1;
       q[++e]=code(pom);
       if (e==640000)
        e=0;
       marked[tmp.x][tmp.y][tmp.z-1][tmp.k1][tmp.k2]=em;
      }
     s++;
     if (s==640001)
      s=1;
    }
   cnt=0;
   back(tmp);
   printf("\n");
   return 0;
  }
