func_code_string: #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;   }   