func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long int mx = 70, Mod = 1e9 + 7, mxx = 350000;   int n;   int get(int x, int y, int z) {     if (x > y) swap(x, y);     if (x > z) swap(x, z);     if (y > z) swap(y, z);     return x * mx * mx + y * mx + z;   }   bool mark[mxx];   vector<int> e[mxx];   int dp[mxx];   int par[mxx];   short d[mx][mx];   vector<pair<int, int> > res;   void connect(int u, int v) {     e[u].push_back(v);     e[v].push_back(u);   }   void bfs(int v) {     mark[v] = 1;     vector<int> vc;     vc.clear();     vc.push_back(v);     for (int i = 0; i < vc.size(); i++)       for (int u : e[v = vc[i]])         if (!mark[u]) mark[u] = 1, vc.push_back(u), par[u] = v;   }   void move(int u, int v) {     short a[3], b[3];     bool ma[3], mb[3];     for (int i = 0; i < 3; i++) {       a[i] = u % mx;       b[i] = v % mx;       u /= mx;       v /= mx;       ma[i] = 0;       mb[i] = 0;     }     for (int i = 0; i < 3; i++)       for (int j = 0; j < 3; j++)         if (a[i] == b[j]) ma[i] = 1, mb[j] = 1;     for (int i = 0; i < 3; i++) {       if (!ma[i]) u = a[i];       if (!mb[i]) v = b[i];     }     res.push_back(make_pair(u + 1, v + 1));   }   int main() {     ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);     int x, y, z, u;     cin >> n >> x >> y >> z;     x--, y--, z--;     string s;     for (int i = 0; i < n; i++) {       cin >> s;       for (int j = 0; j < n; j++) d[i][j] = s[j] -  a  + 1;     }     for (int i = 0; i < n; i++) {       for (int j = i + 1; j < n; j++) {         for (int k = j + 1; k < n; k++) {           u = get(i, j, k);           for (int v = min(min(i, j), k) + 1; v < n; v++)             if (v != i && v != j && v != k) {               if (d[v][i] == d[j][k] && v > i) connect(u, get(v, j, k));               if (d[v][j] == d[i][k] && v > j) connect(u, get(v, i, k));               if (d[v][k] == d[i][j] && v > k) connect(u, get(v, i, j));             }         }       }     }     u = get(x, y, z);     if (u == get(0, 1, 2)) return cout <<  0 n , 0;     bfs(get(0, 1, 2));     if (!par[u]) return cout <<  -1 , 0;     while (par[u]) {       move(u, par[u]);       u = par[u];     }     cout << res.size() <<   n ;     for (pair<int, int> p : res) cout << p.first <<     << p.second <<   n ;     return 0;   }   