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