func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 55;   const int INF = 1 << 20;   bool dp1[MAXN][MAXN][26] = {false};   bool dp2[MAXN][MAXN][26] = {false};   int dp[MAXN][MAXN];   char s1[MAXN], s2[MAXN];   string tr[MAXN];   int n;   void cal(char* s, bool f[MAXN][MAXN][26]) {     int len = strlen(s);     for (int i = 0; i < len; i++) {       f[i][i][s[i] -  a ] = true;     }     for (int L = 1; L <= len; L++) {       for (int i = 0; i + L - 1 < len; i++) {         int j = i + L - 1;         for (int k = i; k < j; k++) {           for (int c = 0; c < n; c++) {             if (f[i][k][tr[c][3] -  a ] && f[k + 1][j][tr[c][4] -  a ]) {               f[i][j][tr[c][0] -  a ] = true;             }           }         }       }     }   }   int main() {     cin >> s1 >> s2;     cin >> n;     for (int i = 0; i < n; i++) {       cin >> tr[i];     }     cal(s1, dp1);     cal(s2, dp2);     int len1 = strlen(s1);     int len2 = strlen(s2);     for (int i = 0; i <= len1; i++)       for (int j = 0; j <= len2; j++) dp[i][j] = INF;     dp[0][0] = 0;     for (int i = 0; i < len1; i++)       for (int ii = i; ii < len1; ii++)         for (int c = 0; c < 26; c++)           if (dp1[i][ii][c])             for (int j = 0; j < len2; j++)               for (int jj = j; jj < len2; jj++)                 if (dp2[j][jj][c])                   dp[ii + 1][jj + 1] = min(dp[ii + 1][jj + 1], dp[i][j] + 1);     int ans = (dp[len1][len2] == INF ? -1 : dp[len1][len2]);     cout << ans << endl;   }   