func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 30;   const int M = 110;   const int LIT = 2500;   const int INF = 1 << 28;   string s;   int n, m;   int val[N][N];   void init() {     cin >> n;     memset(val, 0, sizeof(val));     for (int i = 1; i <= n; i++) {       string a, b;       int v;       cin >> a >> b >> v;       int aa = a[0] -  a ;       int bb = b[0] -  a ;       val[aa][bb] = v;     }   }   int dp[M][M][N];   void solve() {     memset(dp, 0, sizeof(dp));     for (int i = 0; i < 26; i++) {       int ch = s[0] -  a ;       dp[0][1][i] = 0;       dp[0][0][i] = -INF;       if (i == ch) dp[0][0][i] = 0;     }     for (int i = 1; i < s.size(); i++) {       int ch = s[i] -  a ;       for (int j = 0; j <= i + 1; j++) {         for (int k = 0; k < 26; k++) {           int Max = -INF;           if (ch == k && j <= i) {             for (int p = 0; p < 26; p++) {               int tmp = dp[i - 1][j][p] + val[p][k];               Max = max(Max, tmp);             }           } else {             for (int p = 0; j && p < 26; p++) {               int tmp = dp[i - 1][j - 1][p] + val[p][k];               Max = max(Max, tmp);             }           }           dp[i][j][k] = Max;         }       }     }     int out = s.size() - 1, res = -INF;     for (int i = 0; i <= min(out + 1, m); i++) {       for (int k = 0; k < 26; k++) {         res = max(res, dp[out][i][k]);       }     }     cout << res << endl;   }   int main() {     while (cin >> s >> m) {       init();       solve();     }   }   