#include <bits/stdc++.h>
using namespace std;
const int inf = 1000000000;
const int MOD = 1000000007;
int a[5];
string s[99];
vector<pair<int, pair<int, int> > > g[1000000];
int d[1000000], q[1000009];
pair<int, int> pr[1000000];
int P[1000000];
inline int id(int i, int j, int k) { return 10000 * i + 100 * j + k; }
int main() {
  int n;
  cin >> n;
  for (int i = (1); i <= (3); ++i) cin >> a[i];
  sort(a + 1, a + 4);
  for (int i = (1); i <= (n); ++i) {
    cin >> s[i];
    s[i] = " " + s[i];
  }
  int b[4];
  for (int i = (1); i <= (n); ++i)
    for (int j = (i + 1); j <= (n); ++j)
      for (int k = (j + 1); k <= (n); ++k) {
        for (int to = (1); to <= (n); ++to)
          if (to != j && to != k && to != i && s[i][to] == s[j][k]) {
            b[1] = to;
            b[2] = j;
            b[3] = k;
            sort(b + 1, b + 4);
            g[id(i, j, k)].push_back(
                make_pair(id(b[1], b[2], b[3]), make_pair(i, to)));
          }
        for (int to = (1); to <= (n); ++to)
          if (to != j && to != k && to != i && s[j][to] == s[i][k]) {
            b[1] = to;
            b[2] = i;
            b[3] = k;
            sort(b + 1, b + 4);
            g[id(i, j, k)].push_back(
                make_pair(id(b[1], b[2], b[3]), make_pair(j, to)));
          }
        for (int to = (1); to <= (n); ++to)
          if (to != j && to != k && to != i && s[k][to] == s[j][i]) {
            b[1] = to;
            b[2] = j;
            b[3] = i;
            sort(b + 1, b + 4);
            g[id(i, j, k)].push_back(
                make_pair(id(b[1], b[2], b[3]), make_pair(k, to)));
          }
      }
  memset(d, 63, sizeof(d));
  int qt = 0, qh = 0;
  q[qt++] = id(a[1], a[2], a[3]);
  d[id(a[1], a[2], a[3])] = 0;
  while (qh < qt) {
    int v = q[qh++];
    for (int i = (0); i <= ((int)((g[v]).size()) - 1); ++i) {
      int to = g[v][i].first;
      if (d[to] > d[v] + 1) {
        P[to] = v;
        pr[to] = g[v][i].second;
        d[to] = d[v] + 1;
        q[qt++] = to;
      }
    }
  }
  if (d[id(1, 2, 3)] > inf) {
    cout << "-1" << endl;
    return 0;
  }
  vector<pair<int, int> > ans;
  int cur = id(1, 2, 3);
  while (cur != id(a[1], a[2], a[3])) {
    ans.push_back(pr[cur]);
    cur = P[cur];
  }
  reverse(ans.begin(), ans.end());
  cout << (int)((ans).size()) << endl;
  for (int i = (0); i <= ((int)((ans).size()) - 1); ++i)
    cout << ans[i].first << " " << ans[i].second << endl;
}
