/*
TASK:lab
LANG:C
*/

//#define DEBUG

#include <stdio.h>

#define IN     "lab.in"
#define OUT    "lab.out"
#define MAX    40

long n, reslen;
long xs, ys, zs, xe, ye, ze;
char c1, c2;

char letter[MAX][MAX][MAX];
char data[MAX][MAX][MAX];

char prev[40*40*40*90];
long queue[40*40*40*90], qend;

const long v1=40*40*90, v2=40*90, v3=90, v4=10;

inline int yes(long x, long y, long z)
{
   if(x==xe && y==ye && z==ze)
     return 1;

   return 0;
}

long code(long x, long y, long z, char c1, char c2)
{
   long ret=0;

   ret=x*v1;
   ret+=y*v2;
   ret+=z*v3;
   ret+=((c1<c2?(c1):(c1-1))*v4);
   ret+=c2;

   return ret;
}

void decode(long code, long *x, long *y, long *z, char *c1, char *c2)
{
   *x=code/v1;code%=v1;
   *y=code/v2;code%=v2;
   *z=code/v3;code%=v3;
   *c1=code/v4;code%=v4;
   *c2=code;

   if(*c1>=*c2) (*c1)++;
}

int main()
{
   long i, j, x, y, z, next, last, pos;
   char ch;
   
#ifdef DEBUG
   freopen(IN, "r", stdin);
   freopen(OUT, "w", stdout);
#endif

   scanf("%ld", &n);
   scanf("%ld%ld%ld", &xs, &ys, &zs);xs--;ys--;zs--;
   scanf("%ld%ld%ld", &xe, &ye, &ze);xe--;ye--;ze--;
   do
   {
      ch=getc(stdin);
   }while(ch<'A' || ch>'J');

   c1=ch-'A';
   c2=getc(stdin)-'A';

   for(z=0; z<n; z++)
      for(x=0; x<n; x++)
         for(y=0; y<n; y++)
         {
            do
            {
              ch=getc(stdin);
            }while(ch<'A' || ch>'J');

            data[x][y][z]=ch-'A';
         }

   for(z=0; z<n; z++)
      for(x=0; x<n; x++)
         for(y=0; y<n; y++)
         {
            do
            {
              ch=getc(stdin);
            }while((ch<'A' || ch>'J') && ch!='O');

            letter[x][y][z]=ch;

            if(ch!='O')
              letter[x][y][z]-='A';
         }

   queue[0]=code(xs, ys, zs, c1, c2);
   qend=1;

   for(i=0; i<qend; i++)
   {
      decode(queue[i], &x, &y, &z, &c1, &c2);

      if(x+1<n && (data[x+1][y][z]==c1 || data[x+1][y][z]==c2))
      {
        next=code(x+1, y, z, c1, c2);
        if(!prev[next])
        {
          prev[next]='X';
          queue[qend++]=next;
        }

        if(yes(x+1, y, z)) break;
      }

      if(x-1>=0 && (data[x-1][y][z]==c1 || data[x-1][y][z]==c2))
      {
        next=code(x-1, y, z, c1, c2);
        if(!prev[next])
        {
          prev[next]='U';
          queue[qend++]=next;
        }

        if(yes(x-1, y, z)) break;
      }

      if(y+1<n && (data[x][y+1][z]==c1 || data[x][y+1][z]==c2))
      {
        next=code(x, y+1, z, c1, c2);
        if(!prev[next])
        {
          prev[next]='Y';
          queue[qend++]=next;
        }

        if(yes(x, y+1, z)) break;
      }

      if(y-1>=0 && (data[x][y-1][z]==c1 || data[x][y-1][z]==c2))
      {
        next=code(x, y-1, z, c1, c2);
        if(!prev[next])
        {
          prev[next]='V';
          queue[qend++]=next;
        }

        if(yes(x, y-1, z)) break;
      }
      
      if(z+1<n && (data[x][y][z+1]==c1 || data[x][y][z+1]==c2))
      {
        next=code(x, y, z+1, c1, c2);
        if(!prev[next])
        {
          prev[next]='Z';
          queue[qend++]=next;
        }

        if(yes(x, y, z+1)) break;
      }

      if(z-1>=0 && (data[x][y][z-1]==c1 || data[x][y][z-1]==c2))
      {
        next=code(x, y, z-1, c1, c2);
        if(!prev[next])
        {
          prev[next]='W';
          queue[qend++]=next;
        }

        if(yes(x, y, z-1)) break;
      }

      ch=letter[x][y][z];

      if(ch=='O') continue;

      if(ch!=c1 && ch!=c2)
      {
        next=code(x, y, z, ch, c2);
        if(!prev[next])
        {
          prev[next]=c1+'A';
          queue[qend++]=next;
        }
      }

      if(ch!=c1 && ch!=c2)
      {
        next=code(x, y, z, c1, ch);
        if(!prev[next])
        {
          prev[next]=c2+'A';
          queue[qend++]=next;
        }
      }
   }

   last=queue[0];
   pos=queue[qend-1];
   decode(pos, &x, &y, &z, &c1, &c2);

   for(reslen=0; pos!=last; reslen++)
   {
      queue[reslen]=prev[pos];

      if(prev[pos]=='X') x--;
      if(prev[pos]=='Y') y--;
      if(prev[pos]=='Z') z--;
      if(prev[pos]=='U') x++;
      if(prev[pos]=='V') y++;
      if(prev[pos]=='W') z++;
      if(prev[pos]<='J' && letter[x][y][z]==c1) c1=prev[pos]-'A';
      if(prev[pos]<='J' && letter[x][y][z]==c2) c2=prev[pos]-'A';

      pos=code(x, y, z, c1, c2);
   }

   printf("%ld\n", reslen);
   for(i=reslen-1; i>=0; i--)
      printf("%c", ((char)(queue[i])));
   printf("\n");

#ifdef DEBUG
   fclose(stdin);
   fclose(stdout);
#endif

   return 0;
}

