/*
TASK: lab
LANG: C
*/

#include <stdio.h>
#define MAX (30)
#define INF (1 << 29)

int min0 (int a, int b)  {
  return a < b ? a : b;
}

int max0 (int a, int b)  {
  return a > b ? a : b;
}

typedef struct  {
  int x, y, z, d, c1, c2;
} pt;

int ns[3][6] = { {+1, 0, 0,-1, 0, 0 },
                 { 0,+1, 0, 0,-1, 0 },
                 { 0, 0,+1, 0, 0,-1 } };
char nsl[6]  = {'X', 'Y', 'Z', 'U', 'V', 'W'};

char s[MAX * MAX * MAX];
int si;
char a[MAX][MAX][MAX];
char c[MAX][MAX][MAX];
int o[MAX][MAX][MAX][11][11];
char p[MAX][MAX][MAX][11][11];
char v[MAX][MAX][MAX][11][11];
int n;
int xx, yy, zz, kk, qq;
int c1, c2;
pt h[MAX * MAX * MAX];
pt t1, t2;

void init ()  {
  int x, y, z, k, q, t;

//freopen ("lab.in" , "r", stdin );
//freopen ("lab.out", "w", stdout);

  scanf ("%d%d%d%d%d%d%d", &n, &t1.x, &t1.y, &t1.z, &t2.x, &t2.y, &t2.z);
  scanf ("%1s%1s", &c1, &c2);
  c1 -= 'A' - 1;
  c2 -= 'A' - 1;

  for (z = 1; z <= n; ++z)
    for (x = 1; x <= n; ++x)
      for (y = 1; y <= n; ++y)  {
        scanf ("%1s", &a[x][y][z]);
        a[x][y][z] -= 'A' - 1;
      }
      
  for (z = 1; z <= n; ++z)
    for (x = 1; x <= n; ++x)
      for (y = 1; y <= n; ++y)  {
        scanf ("%1s", &c[x][y][z]);
        c[x][y][z] -= 'A' - 1;
        for (k = 1; k <= 10; ++k)
          for (q = 1; q <= 10; ++q)
            o[x][y][z][k][q] = INF;
      }

  if (c1 < c2)  {
    t = c1;
    c1 = c2;
    c2 = t;
  }

  o[(int)t1.x][(int)t1.y][(int)t1.z][(int)c1][(int)c2] = 0;
}

void min (int *xx, int *yy, int *zz, int *kk, int *qq)  {
  int x, y, z, k, q;
  int m;

  m = INF;

  for (x = 1; x <= n; ++x)
    for (y = 1; y <= n; ++y)
      for (z = 1; z <= n; ++z)
        for (k = 1; k <= 10; ++k)
          for (q = 1; q <= 10; ++q)
            if (!v[x][y][z][k][q] && m > o[x][y][z][k][q])  {
              m = o[x][y][z][k][q];
              *xx = x;
              *yy = y;
              *zz = z;
              *kk = k;
              *qq = q;
            }
}

void dij (int *kk, int *qq)  {
  int i, j, t, mn, mx;
  int x, y, z, k, q;

  for (;;)  {
    min (&x, &y, &z, &k, &q);
    if (x == t2.x && y == t2.y && z == t2.z)  {
      *kk = k;
      *qq = q;
      return;
    }

    v[x][y][z][k][q] = 1;
    for (i = 0; i <= 5; ++i)
      if (1 <= x + ns[0][i] && x + ns[0][i] <= n && 1 <= y + ns[1][i] && y + ns[1][i] <= n && 1 <= z + ns[2][i] && z + ns[2][i] <= n && (a[ x + ns[0][i] ][ y + ns[1][i] ][ z + ns[2][i] ] == k || a[ x + ns[0][i] ][ y + ns[1][i] ][ z + ns[2][i] ] == q) && o[x + ns[0][i]][y + ns[1][i]][z + ns[2][i]][k][q] > o[x][y][z][k][q] + 1)  {
        o[x + ns[0][i]][y + ns[1][i]][z + ns[2][i]][k][q] = o[x][y][z][k][q] + 1;
        p[x + ns[0][i]][y + ns[1][i]][z + ns[2][i]][k][q] = nsl[i];
      }
    if (c[x][y][z] != 'O' - 'A' + 1)  {
      mn = min0 (c[x][y][z], k);
      mx = max0 (c[x][y][z], k);
      if (o[x][y][z][mx][mn] > o[x][y][z][k][q] + 1)  {
        o[x][y][z][mx][mn] = o[x][y][z][k][q] + 1;
        p[x][y][z][mx][mn] = q;
      }
      mn = min0 (c[x][y][z], q);
      mx = max0 (c[x][y][z], q);
      if (o[x][y][z][mx][mn] > o[x][y][z][k][q] + 1)  {
        o[x][y][z][mx][mn] = o[x][y][z][k][q] + 1;
        p[x][y][z][mx][mn] = k;
      }
    }
  }
}

void think ()  {
  dij (&kk, &qq);
}

void pset (int xx, int yy, int zz, int kk, int qq)  {
  int x, y, z, k, q, mn, mx;

  x = xx;
  y = yy;
  z = zz;
  k = kk;
  q = qq;

  while (!(x == t1.x && y == t1.y && z == t1.z && k == c1 && q == c2))  {
    s[++si] = p[x][y][z][k][q];
    if ('A' - 'A' + 1 <= p[x][y][z][k][q] && p[x][y][z][k][q] <= 'J' - 'A' + 1)  {
      if (k == c[x][y][z])  {
        k = max0 (p[x][y][z][k][q], q);
        q = min0 (p[x][y][z][k][q], q);
      }
      else if (q == c[x][y][z])  {
        k = max0 (p[x][y][z][k][q], k);
        q = min0 (p[x][y][z][k][q], k);
      }
    }
    else  {
      if      (p[x][y][z][k][q] == 'X')
        --x;
      else if (p[x][y][z][k][q] == 'Y')
        --y;
      else if (p[x][y][z][k][q] == 'Z')
        --z;
      else if (p[x][y][z][k][q] == 'U')
        ++x;
      else if (p[x][y][z][k][q] == 'V')
        ++y;
      else if (p[x][y][z][k][q] == 'W')
        ++z;
    }
  }

  while (si)  {
    if (1 <= s[si] && s[si] <= 10)
      printf ("%c", s[si] + 'A' - 1);
    else
      printf ("%c", s[si]);
    --si;
  }
  printf ("\n");
}

void print ()  {
  xx = t2.x;
  yy = t2.y;
  zz = t2.z;
  printf ("%d\n", o[xx][yy][zz][kk][qq]);
  pset (xx, yy, zz, kk, qq);
}

int main ()  {
  init ();
  think ();
  print ();

  return 0;
}

