#include <bits/stdc++.h>
using namespace std;
bool mark[72][72][72];
int a[10];
pair<int, pair<int, int> > Par[72][72][72];
pair<int, int> par[72][72][72];
queue<pair<int, pair<int, int> > > q;
vector<pair<int, int> > v;
char c[100][100];
int main() {
  ios_base::sync_with_stdio(false);
  int n;
  cin >> n;
  cin >> a[3] >> a[1] >> a[2];
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) cin >> c[i][j];
  sort(a + 1, a + 3 + 1);
  if (a[1] == 1 && a[2] == 2 && a[3] == 3) {
    cout << 0;
    return 0;
  }
  bool ans = false;
  mark[a[1]][a[2]][a[3]] = true;
  q.push(make_pair(a[1], make_pair(a[2], a[3])));
  while (q.size()) {
    int A = q.front().first;
    int B = q.front().second.first;
    int C = q.front().second.second;
    if (A == 1 && B == 2 && C == 3) {
      ans = true;
      while (par[A][B][C].first != 0) {
        v.push_back(par[A][B][C]);
        int AA = A, BB = B, CC = C;
        A = Par[AA][BB][CC].first;
        B = Par[AA][BB][CC].second.first;
        C = Par[AA][BB][CC].second.second;
      }
    }
    for (int i = 1; i <= n; i++) {
      if (i != A && i != B && i != C) {
        if (c[A][i] == c[B][C]) {
          a[1] = i;
          a[2] = B;
          a[3] = C;
          sort(a + 1, a + 3 + 1);
          if (!mark[a[1]][a[2]][a[3]]) {
            par[a[1]][a[2]][a[3]] = make_pair(A, i);
            Par[a[1]][a[2]][a[3]] = make_pair(A, make_pair(B, C));
            mark[a[1]][a[2]][a[3]] = true;
            q.push(make_pair(a[1], make_pair(a[2], a[3])));
          }
        }
      }
    }
    for (int i = 1; i <= n; i++) {
      if (i != A && i != B && i != C) {
        if (c[B][i] == c[A][C]) {
          a[1] = A;
          a[2] = i;
          a[3] = C;
          sort(a + 1, a + 3 + 1);
          if (!mark[a[1]][a[2]][a[3]]) {
            par[a[1]][a[2]][a[3]] = make_pair(B, i);
            Par[a[1]][a[2]][a[3]] = make_pair(A, make_pair(B, C));
            mark[a[1]][a[2]][a[3]] = true;
            q.push(make_pair(a[1], make_pair(a[2], a[3])));
          }
        }
      }
    }
    for (int i = 1; i <= n; i++) {
      if (i != A && i != B && i != C) {
        if (c[C][i] == c[B][A]) {
          a[1] = A;
          a[2] = B;
          a[3] = i;
          sort(a + 1, a + 3 + 1);
          if (!mark[a[1]][a[2]][a[3]]) {
            par[a[1]][a[2]][a[3]] = make_pair(C, i);
            Par[a[1]][a[2]][a[3]] = make_pair(A, make_pair(B, C));
            mark[a[1]][a[2]][a[3]] = true;
            q.push(make_pair(a[1], make_pair(a[2], a[3])));
          }
        }
      }
    }
    q.pop();
  }
  if (!ans) {
    cout << -1;
    return 0;
  }
  cout << v.size() << endl;
  for (int i = v.size() - 1; i >= 0; i--)
    cout << v[i].first << " " << v[i].second << endl;
}
