#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000000000")
using namespace std;
const long long int INF = 2e9;
char s[80][80];
pair<int, pair<int, int> > fr[80][80][80];
pair<int, int> print[80][80][80];
int used[80][80][80];
int main() {
  int n;
  cin >> n;
  int a, b, c;
  cin >> a >> b >> c;
  a--;
  b--;
  c--;
  memset(used, -1, sizeof used);
  for (int i = 0; i < (n); i++) {
    scanf("%s", &s[i]);
  }
  queue<pair<int, pair<int, int> > > q;
  q.push(make_pair(a, make_pair(b, c)));
  used[a][b][c] = 0;
  fr[a][b][c] = make_pair(-1, make_pair(-1, -1));
  while (!q.empty()) {
    a = q.front().first;
    b = q.front().second.first;
    c = q.front().second.second;
    q.pop();
    int fi[3] = {a, b, c}, tfi[3];
    for (int i = 0; i < (n); i++) {
      for (int j = 0; j < (3); j++) {
        if (fi[j] == i) continue;
        bool yes = false;
        vector<int> temp;
        for (int k = 0; k < (3); k++) {
          if (j == k) continue;
          if (fi[k] == i) yes = true;
          temp.push_back(k);
        }
        if (yes) continue;
        if (s[fi[j]][i] == s[fi[temp[0]]][fi[temp[1]]]) {
          tfi[0] = i;
          tfi[1] = fi[temp[0]];
          tfi[2] = fi[temp[1]];
          sort(tfi, tfi + 3);
          if (used[tfi[0]][tfi[1]][tfi[2]] == -1) {
            used[tfi[0]][tfi[1]][tfi[2]] = used[a][b][c] + 1;
            print[tfi[0]][tfi[1]][tfi[2]] = make_pair(fi[j], i);
            fr[tfi[0]][tfi[1]][tfi[2]] =
                make_pair(fi[0], make_pair(fi[1], fi[2]));
            q.push(make_pair(tfi[0], make_pair(tfi[1], tfi[2])));
          }
        }
      }
    }
  }
  if (used[0][1][2] == -1)
    cout << -1;
  else {
    cout << used[0][1][2] << endl;
    a = 0, b = 1, c = 2;
    vector<pair<int, int> > out;
    while (true) {
      int ta = fr[a][b][c].first;
      int tb = fr[a][b][c].second.first;
      int tc = fr[a][b][c].second.second;
      if (ta == -1) break;
      out.push_back(print[a][b][c]);
      a = ta;
      b = tb;
      c = tc;
    }
    reverse(out.begin(), out.end());
    for (int i = 0; i < ((int)(out).size()); i++) {
      printf("%d %d\n", out[i].first + 1, out[i].second + 1);
    }
  }
}
