#include <bits/stdc++.h>
using namespace std;
const double PI = 3.14159265359;
#pragma comment(linker, "/STACK:1024000000")
struct state {
  state() {}
  state(int a, int b, int c) {
    s[0] = a;
    s[1] = b;
    s[2] = c;
  }
  int s[3];
};
int ans[75][75][75];
bool used[75][75][75];
state pr[75][75][75];
int s1, s2, s3;
int n;
char f[75][75];
void nrm(int &a, int &b, int &c) {
  if (b < a) swap(a, b);
  if (c < a) swap(a, c);
  if (c < b) swap(b, c);
}
bool bfs() {
  queue<state> q;
  q.push(state(s1, s2, s3));
  ans[s1][s2][s3] = 0;
  if (s1 == 1 && s2 == 2 && s3 == 3) return true;
  while (!q.empty()) {
    state st = q.front();
    q.pop();
    for (int i = 0; i < 3; ++i) {
      int A = st.s[(i + 1) % 3], B = st.s[(i + 2) % 3];
      char cl = f[A][B];
      for (int j = 1; j <= n; ++j) {
        if (j != st.s[0] && j != st.s[1] && j != st.s[2] &&
            f[st.s[i]][j] == cl) {
          int a1 = j, a2 = A, a3 = B;
          nrm(a1, a2, a3);
          if (!used[a1][a2][a3]) {
            used[a1][a2][a3] = true;
            pr[a1][a2][a3] = st;
            ans[a1][a2][a3] = ans[st.s[0]][st.s[1]][st.s[2]] + 1;
            if (a1 == 1 && a2 == 2 && a3 == 3) return true;
            q.push(state(a1, a2, a3));
          }
        }
      }
    }
  }
  return false;
}
void answer() {
  printf("%d\n", ans[1][2][3]);
  vector<pair<int, int> > vec;
  int a[3] = {1, 2, 3};
  while (true) {
    if (a[0] == s1 && a[1] == s2 && a[2] == s3) break;
    state p = pr[a[0]][a[1]][a[2]];
    int id1, id2;
    for (int i = 0; i < 3; ++i) {
      bool fnd = false;
      for (int j = 0; j < 3; ++j)
        if (p.s[j] == a[i]) fnd = true;
      if (!fnd) id1 = i;
    }
    for (int i = 0; i < 3; ++i) {
      bool fnd = false;
      for (int j = 0; j < 3; ++j)
        if (p.s[i] == a[j]) fnd = true;
      if (!fnd) id2 = i;
    }
    vec.push_back(make_pair(p.s[id2], a[id1]));
    for (int i = 0; i < 3; ++i) a[i] = p.s[i];
  }
  for (int i = vec.size() - 1; i >= 0; --i)
    printf("%d %d\n", vec[i].first, vec[i].second);
}
int main() {
  cin >> n;
  cin >> s1 >> s2 >> s3;
  nrm(s1, s2, s3);
  for (int i = 1; i <= n; ++i) scanf("%s", f[i] + 1);
  if (bfs())
    answer();
  else
    puts("-1");
  return 0;
}
