func_code_string: #include <bits/stdc++.h>   typedef int arr[55][55];   char s0[55], s1[55], opr[9];   int x[55], y[55], z[55], f[55][55], n0, n1, m;   bool b[55][55][55];   arr e0, e1;   void work(int &n, char *s, arr &e) {     n = strlen(s);     memset(b, 0, sizeof(b));     for (int i = 0; i < n; i++) b[i][i + 1][s[i] - 97] = 1;     for (int j = 2; j <= n; j++)       for (int i = 0; i + j <= n; i++)         for (int k = i + 1; k < i + j; k++)           for (int c = 0; c < m; c++)             b[i][i + j][z[c]] |= b[i][k][x[c]] && b[k][i + j][y[c]];     for (int i = 0; i < n; i++)       for (int j = i + 1; j <= n; j++)         for (int k = 0; k < 26; k++)           if (b[i][j][k]) e[i][j] |= 1 << k;   }   int main() {     scanf( %s%s%d , s0, s1, &m);     for (int i = 0; i < m; i++)       scanf( %s , opr), x[i] = opr[3] - 97, y[i] = opr[4] - 97,                         z[i] = opr[0] - 97;     work(n0, s0, e0), work(n1, s1, e1);     memset(f, 6, sizeof(f));     f[0][0] = 0;     for (int i = 0; i <= n0; i++)       for (int x = 0; x <= n1; x++)         for (int j = i + 1; j <= n0; j++)           for (int y = x + 1; y <= n1; y++)             if (e0[i][j] & e1[x][y] && f[i][x] + 1 < f[j][y])               f[j][y] = f[i][x] + 1;     printf( %d n , f[n0][n1] <= 100 ? f[n0][n1] : -1);     return 0;   }   