func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e6 + 5;   const long long M = 1e9 + 7;   const long long inf = 1e18 + 5;   vector<int> prefix_function(string &s) {     int n = s.size();     vector<int> pre(n);     int pos = 0;     pre[0] = 0;     for (int i = 1; i < n; i++) {       while (pos and s[pos] != s[i]) pos = pre[pos - 1];       if (s[pos] == s[i]) pos++;       pre[i] = pos;     }     return pre;   }   int main() {     string s, t;     cin >> t >> s;     int n = s.size();     vector<int> pre = prefix_function(s);     int a[n][26];     for (int i = 0; i < n; i++) {       for (int c = 0; c < 26; c++) {         if (i and s[i] !=  a  + c)           a[i][c] = a[pre[i - 1]][c];         else           a[i][c] = i + (s[i] ==  a  + c);       }     }     int tz = t.size();     int dp[tz + 1][n];     memset(dp, -1, sizeof(dp));     dp[0][0] = 0;     for (int i = 0; i < tz; i++) {       for (int j = 0; j < n; j++) {         if (dp[i][j] != -1) {           if (t[i] ==  ? ) {             for (int ch = 0; ch < 26; ch++) {               int val = a[j][ch];               if (val == n)                 dp[i + 1][pre[n - 1]] = max(dp[i + 1][n - 1], dp[i][j] + 1);               else                 dp[i + 1][val] = max(dp[i + 1][val], dp[i][j]);             }           } else {             int val = a[j][t[i] -  a ];             if (val == n)               dp[i + 1][pre[n - 1]] = max(dp[i + 1][n - 1], dp[i][j] + 1);             else               dp[i + 1][val] = max(dp[i + 1][val], dp[i][j]);           }         }       }     }     int ans = 0;     for (int i = 0; i < n; i++) ans = max(ans, dp[tz][i]);     printf( %d  , ans);   }   