#include <bits/stdc++.h>
using namespace std;
int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = (x << 3) + (x << 1) + (ch ^ 48);
    ch = getchar();
  }
  return x * f;
}
const int N = 80;
bool vis[N][N][N];
struct node {
  int x, y, z, step;
  node(int xx, int yy, int zz, int ss) { x = xx, y = yy, z = zz, step = ss; }
  node() {}
};
int n;
char s[N][N];
node pre[N][N][N];
node bfs(int x, int y, int z) {
  queue<node> que;
  vis[x][y][z] = 1;
  pre[x][y][z] = node(-1, -1, -1, -1);
  que.push(node(x, y, z, 0));
  while (!que.empty()) {
    node head = que.front();
    que.pop();
    if (head.x + head.y + head.z == 6) return head;
    int u = head.x, v = head.y, w = head.z;
    for (int i = 1; i <= n; i++) {
      if (i == u || i == v || i == w) continue;
      if (s[u][i] == s[v][w] && !vis[i][v][w]) {
        vis[i][v][w] = 1;
        pre[i][v][w] = head;
        que.push(node(i, v, w, head.step + 1));
      }
      if (s[v][i] == s[u][w] && !vis[u][i][w]) {
        vis[u][i][w] = 1;
        pre[u][i][w] = head;
        que.push(node(u, i, w, head.step + 1));
      }
      if (s[w][i] == s[u][v] && !vis[u][v][i]) {
        vis[u][v][i] = 1;
        pre[u][v][i] = head;
        que.push(node(u, v, i, head.step + 1));
      }
    }
  }
  return node(-1, -1, -1, -1);
}
int main() {
  scanf("%d", &n);
  int u, v, w;
  scanf("%d%d%d", &u, &v, &w);
  for (int i = 1; i <= n; i++) scanf("%s", s[i] + 1);
  node ans = bfs(u, v, w);
  if (ans.x == -1) return puts("-1"), 0;
  printf("%d\n", ans.step);
  vector<node> Ans;
  u = ans.x, v = ans.y, w = ans.z;
  while (pre[u][v][w].x != -1) {
    node p = pre[u][v][w];
    if (p.x != u)
      Ans.push_back(node(p.x, u, 0, 0));
    else if (p.y != v)
      Ans.push_back(node(p.y, v, 0, 0));
    else
      Ans.push_back(node(p.z, w, 0, 0));
    u = p.x, v = p.y, w = p.z;
  }
  for (int i = Ans.size() - 1; i >= 0; i--)
    printf("%d %d\n", Ans[i].x, Ans[i].y);
  return 0;
}
