func_code_string: #include <bits/stdc++.h>   using namespace std;   int dp[51][51], n;   int len[2];   bool ok[2][26][51][51];   char str[50][51], s[2][51];   void Init(int id) {     int st, ed, L, mid;     for (int i = 0; i < len[id]; i++) ok[id][s[id][i] -  a ][i + 1][i + 1] = true;     for (L = 2; L <= len[id]; L++)       for (st = 1, ed = st + L - 1; ed <= len[id]; st++, ed++)         for (mid = st; mid < ed; mid++)           for (int i = 0; i < n; i++)             if (ok[id][str[i][3] -  a ][st][mid] &&                 ok[id][str[i][4] -  a ][mid + 1][ed])               ok[id][str[i][0] -  a ][st][ed] = true;   }   int main() {     for (int i = 0; i < 2; i++) {       scanf( %s n , s[i]);       len[i] = strlen(s[i]);     }     scanf( %d n , &n);     for (int i = 0; i < n; i++) scanf( %s n , str[i]);     Init(0);     Init(1);     for (int i = 0; i < 51; i++)       for (int j = 0; j < 51; j++) dp[i][j] = 99999999;     dp[0][0] = 0;     for (int i = 1; i <= len[0]; i++)       for (int j = 1; j <= len[1]; j++)         for (int q = 0; q < i; q++)           for (int p = 0; p < j; p++)             if (dp[q][p] < dp[len[0]][len[1]])               for (int ch = 0; ch < 26; ch++)                 if (ok[0][ch][q + 1][i] && ok[1][ch][p + 1][j]) {                   dp[i][j] = min(dp[q][p] + 1, dp[i][j]);                   break;                 }     if (dp[len[0]][len[1]] < 999999)       printf( %d n , dp[len[0]][len[1]]);     else       puts( -1 );     return 0;   }   