#include <bits/stdc++.h>
using namespace std;
const int MAXN = 70 + 10;
int n, dist[MAXN * MAXN * MAXN], u[3];
char arr[MAXN][MAXN];
int a[MAXN * MAXN * MAXN], b[MAXN * MAXN * MAXN];
struct node {
  int v[3] = {-1, -1, -1};
  int A = -1, B = -1;
  node(int v1 = -1, int v2 = -1, int v3 = -1, int A_ = -1, int B_ = -1) {
    v[0] = v1;
    v[1] = v2;
    v[2] = v3;
    A = A_;
    B = B_;
    sort(this->v, this->v + 3);
  }
  int number() { return v[0] + n * v[1] + n * n * v[2]; }
  vector<node> adj() {
    vector<node> adj_;
    for (int j = 0; j < n; j++) {
      if (j == v[0] || j == v[1] || j == v[2]) continue;
      if (arr[v[1]][v[2]] == arr[v[0]][j])
        adj_.push_back(node(v[1], v[2], j, v[0], j));
      if (arr[v[0]][v[2]] == arr[v[1]][j])
        adj_.push_back(node(v[0], v[2], j, v[1], j));
      if (arr[v[1]][v[0]] == arr[v[2]][j])
        adj_.push_back(node(v[1], v[0], j, v[2], j));
    }
    return adj_;
  }
} Q[MAXN * MAXN * MAXN], par[MAXN * MAXN * MAXN];
int main() {
  ios::sync_with_stdio(0);
  cin >> n;
  cin >> u[0] >> u[1] >> u[2];
  u[0]--;
  u[1]--;
  u[2]--;
  memset(dist, 63, sizeof(dist));
  dist[node(u[0], u[1], u[2]).number()] = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      cin >> arr[i][j];
    }
  }
  int L = 0, R = 0;
  Q[R++] = node(u[0], u[1], u[2]);
  while (L < R) {
    node tp = Q[L++];
    for (auto i : tp.adj())
      if (dist[i.number()] == dist[MAXN * MAXN * MAXN - 1]) {
        dist[i.number()] = dist[tp.number()] + 1;
        Q[R++] = i;
        par[i.number()] = tp;
        a[i.number()] = i.A;
        b[i.number()] = i.B;
      }
  }
  if (dist[node(0, 1, 2).number()] != dist[MAXN * MAXN * MAXN - 1]) {
    cout << dist[node(0, 1, 2).number()] << '\n';
    vector<pair<int, int>> answer;
    node me = node(0, 1, 2);
    for (int i = 0; i < dist[node(0, 1, 2).number()]; i++) {
      answer.push_back(pair<int, int>(a[me.number()], b[me.number()]));
      me = par[me.number()];
    }
    reverse(answer.begin(), answer.end());
    for (auto i : answer) cout << i.first + 1 << ' ' << i.second + 1 << '\n';
  } else
    cout << -1 << '\n';
  return 0;
}
