func_code_string: #include <bits/stdc++.h>   using namespace std;   char s[2000];   int n, len, ans;   int dpmin[120][55][2], dpmax[120][55][2];   bool u[120][55][2];   int inf = 10005000;   bool go(int i, int n, int d) {     if (i == len) {       if (n % 2 == 0) return 1;       return 0;     }     if (u[i][n][d]) return 1;     u[i][n][d] = 1;     dpmin[i][n][d] = inf;     dpmax[i][n][d] = -inf;     if (s[i] ==  F ) {       if (go(i + 1, n, d)) {         dpmin[i][n][d] = min(dpmin[i][n][d], (d ? -1 : 1) + dpmin[i + 1][n][d]);         dpmax[i][n][d] = max(dpmax[i][n][d], (d ? -1 : 1) + dpmax[i + 1][n][d]);       }       if (n > 0 && go(i + 1, n - 1, d ^ 1)) {         dpmin[i][n][d] = min(dpmin[i][n][d], dpmin[i + 1][n - 1][d ^ 1]);         dpmax[i][n][d] = max(dpmax[i][n][d], dpmax[i + 1][n - 1][d ^ 1]);       }     } else {       if (n > 0 && go(i + 1, n - 1, d)) {         dpmin[i][n][d] =             min(dpmin[i][n][d], (d ? -1 : 1) + dpmin[i + 1][n - 1][d]);         dpmax[i][n][d] =             max(dpmax[i][n][d], (d ? -1 : 1) + dpmax[i + 1][n - 1][d]);       }       if (go(i + 1, n, d ^ 1)) {         dpmin[i][n][d] = min(dpmin[i][n][d], dpmin[i + 1][n][d ^ 1]);         dpmax[i][n][d] = max(dpmax[i][n][d], dpmax[i + 1][n][d ^ 1]);       }     }     return 1;   }   int main() {     scanf( %s%d , s, &n);     len = strlen(s);     go(0, n, 0);     ans = max(-dpmin[0][n][0], dpmax[0][n][0]);     printf( %d n , ans);     return 0;   }   