func_code_string: #include <bits/stdc++.h>   using namespace std;   long long int dp[205][205][205];   long long int recur(string &a, string &b, long long int index, long long int k,                       long long int curr) {     if (index == a.size()) {       return 0;     }     if (dp[index][k][curr] != -1) {       return dp[index][k][curr];     }     if (k > 0) {       if (a[index] == b[0]) {         return dp[index][k][curr] =                    max(recur(a, b, index + 1, k, curr + 1),                        curr + recur(a, b, index + 1, k - 1, curr));       } else if (a[index] == b[1]) {         return dp[index][k][curr] = max(curr + recur(a, b, index + 1, k, curr),                                         recur(a, b, index + 1, k - 1, curr + 1));       } else {         return dp[index][k][curr] =                    max(recur(a, b, index + 1, k, curr),                        max(curr + recur(a, b, index + 1, k - 1, curr),                            recur(a, b, index + 1, k - 1, curr + 1)));       }     } else {       if (a[index] == b[1]) {         return dp[index][k][curr] = curr + recur(a, b, index + 1, k, curr);       } else if (a[index] == b[0]) {         return dp[index][k][curr] = recur(a, b, index + 1, k, curr + 1);       } else {         return dp[index][k][curr] = recur(a, b, index + 1, k, curr);       }     }   }   void solve() {     long long int n, k;     cin >> n >> k;     string a, b;     cin >> a >> b;     memset(dp, -1, sizeof(dp));     if (b[0] == b[1]) {       long long int curr = 0;       for (int i = 0; i < a.size(); i++) {         if (a[i] == b[0]) {           curr++;         }       }       curr = min(curr + k, n);       long long int res = (curr) * (curr - 1);       res = res >> 1;       cout << res <<   n ;     } else {       cout << recur(a, b, 0, k, 0) <<   n ;     }     return;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     int t = 1;     while (t--) {       solve();     }     return 0;   }   