#include <bits/stdc++.h>
using namespace std;
long long ABS(long long x) {
  if (x < 0) return -x;
  return x;
}
int n, a, b, c;
string x[100];
class state {
 public:
  int a, b, c, cost;
  bool operator==(state& x) const { return x.a == a && x.b == b && x.c == c; }
};
bool vis[80][80][80];
state par[80][80][80];
void print(state sr) {
  state g = par[sr.a][sr.b][sr.c];
  if (sr == g) return;
  print(g);
  if (g.a != sr.a)
    cout << g.a + 1 << " " << sr.a + 1 << endl;
  else if (g.b != sr.b)
    cout << g.b + 1 << " " << sr.b + 1 << endl;
  else
    cout << g.c + 1 << " " << sr.c + 1 << endl;
}
state BFS(int a, int b, int c) {
  state sr, ns;
  queue<state> q;
  sr.a = a;
  sr.b = b;
  sr.c = c;
  sr.cost = 0;
  vis[a][b][c] = 1;
  par[a][b][c] = sr;
  q.push(sr);
  while (!q.empty()) {
    sr = q.front();
    q.pop();
    if (sr.a + sr.b + sr.c == 3) return sr;
    char v;
    v = x[sr.b][sr.c];
    for (int i = 0; i < n; ++i) {
      if (i == sr.a || i == sr.b || i == sr.c || x[sr.a][i] != v) continue;
      int d = i;
      if (d == sr.b || d == sr.c || vis[d][sr.b][sr.c]) continue;
      ns.a = d;
      ns.b = sr.b;
      ns.c = sr.c;
      vis[d][sr.b][sr.c] = 1;
      par[ns.a][ns.b][ns.c] = sr;
      ns.cost = sr.cost + 1;
      q.push(ns);
    }
    v = x[sr.a][sr.c];
    for (int i = 0; i < n; ++i) {
      if (i == sr.a || i == sr.b || i == sr.c || x[sr.b][i] != v) continue;
      int d = i;
      if (d == sr.a || d == sr.c || vis[sr.a][d][sr.c]) continue;
      ns.a = sr.a;
      ns.b = d;
      ns.c = sr.c;
      vis[sr.a][d][sr.c] = 1;
      par[ns.a][ns.b][ns.c] = sr;
      ns.cost = sr.cost + 1;
      q.push(ns);
    }
    v = x[sr.b][sr.a];
    for (int i = 0; i < n; ++i) {
      if (i == sr.a || i == sr.b || i == sr.c || x[sr.c][i] != v) continue;
      int d = i;
      if (d == sr.b || d == sr.a || vis[sr.a][sr.b][d]) continue;
      ns.a = sr.a;
      ns.b = sr.b;
      ns.c = d;
      vis[sr.a][sr.b][d] = 1;
      par[ns.a][ns.b][ns.c] = sr;
      ns.cost = sr.cost + 1;
      q.push(ns);
    }
  }
  sr.cost = -1;
  return sr;
}
int main() {
  cin >> n;
  cin >> a >> b >> c;
  --a;
  --b;
  --c;
  for (int i = 0; i < n; ++i) cin >> x[i];
  state get = BFS(a, b, c);
  cout << get.cost << endl;
  if (get.cost != -1) print(get);
}
