#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const int MAX_N = 70 + 1;
int n;
int dist[MAX_N][MAX_N][MAX_N];
pair<int, pair<int, int> > p[MAX_N][MAX_N][MAX_N];
char g[MAX_N][MAX_N];
struct node {
  node() {}
  node(int a, int b, int c) { l[0] = a, l[1] = b, l[2] = c; }
  int l[3];
};
queue<node> q;
void solve(int sa, int sb, int sc) {
  memset(dist, -1, sizeof dist);
  dist[sa][sb][sc] = 0;
  q.push(node(sa, sb, sc));
  node t;
  bool found = false;
  while (!q.empty()) {
    t = q.front();
    q.pop();
    int a = t.l[0], b = t.l[1], c = t.l[2];
    if (max(a, max(b, c)) <= 2) {
      found = true;
      break;
    }
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < n; j++) {
        int ll[2], ls = 0;
        bool good = true;
        for (int k = 0; k < 3; k++) {
          good &= t.l[k] != j;
          if (k != i) ll[ls++] = t.l[k];
        }
        good &= g[t.l[i]][j] == g[ll[0]][ll[1]];
        if (!good) continue;
        int na = (i == 0 ? j : a);
        int nb = (i == 1 ? j : b);
        int nc = (i == 2 ? j : c);
        int& d = dist[na][nb][nc];
        if (d == -1) {
          d = dist[a][b][c] + 1;
          p[na][nb][nc] = make_pair(a, make_pair(b, c));
          q.push(node(na, nb, nc));
        }
      }
    }
  }
  if (!found) {
    cout << -1 << endl;
    return;
  }
  int a = t.l[0], b = t.l[1], c = t.l[2];
  cout << dist[a][b][c] << endl;
  vector<pair<int, int> > out;
  while (!(a == sa && b == sb && c == sc)) {
    int na = p[a][b][c].first;
    int nb = p[a][b][c].second.first;
    int nc = p[a][b][c].second.second;
    if (a != na) out.push_back(make_pair(na, a));
    if (b != nb) out.push_back(make_pair(nb, b));
    if (c != nc) out.push_back(make_pair(nc, c));
    a = na;
    b = nb;
    c = nc;
  }
  reverse(out.begin(), out.end());
  for (pair<int, int> o : out)
    cout << o.first + 1 << ' ' << o.second + 1 << '\n';
}
int main() {
  ios::sync_with_stdio(0);
  while (cin >> n) {
    int a, b, c;
    cin >> a >> b >> c;
    a--, b--, c--;
    for (int i = 0; i < n; i++) cin >> g[i];
    solve(a, b, c);
  }
  return 0;
}
