func_code_string: #include <bits/stdc++.h>   using namespace std;   char s[2005];   char p[505];   int dp[2005][2005];   int len[2005];   int main() {     scanf( %s , s);     scanf( %s , p);     int len_s = strlen(s);     int len_p = strlen(p);     for (int i = 0; i < len_s; i++) {       int tot = i;       if (s[i] != p[0]) {         len[i] = -1;         continue;       }       for (int j = 0; j < len_p; j++) {         while (tot < len_s && s[tot] != p[j]) tot++;         tot++;       }       if (tot >= len_s + 1)         len[i] = -1;       else         len[i] = tot - 1;     }     for (int i = 0; i <= len_s; i++)       for (int j = 0; j <= len_s; j++) dp[i][j] = 0x3f3f3f3f;     dp[0][0] = 0;     int all = len_s / len_p;     len[len_s] = -1;     for (int i = 0; i <= len_s; i++) {       if (i) {         for (int j = 0; j <= all; j++) dp[i][j] = min(dp[i][j], dp[i - 1][j]);       }       if (len[i] != -1) {         for (int j = 0; j <= all; j++) {           dp[len[i] + 1][j + 1] =               min(dp[len[i] + 1][j + 1], dp[i][j] + len[i] - i + 1 - len_p);         }       }     }     int temp = 1;     while (dp[len_s][temp] <= 2000 &&            dp[len_s][temp] - dp[len_s][temp - 1] >= 0 && temp <= all) {       for (int i = 0; i < dp[len_s][temp] - dp[len_s][temp - 1]; i++)         printf( %d  , temp - 1);       temp++;     }     temp -= 1;     int a = len_s - temp * len_p - dp[len_s][temp] + 1;     while (a > 0 && a--) printf( %d  , temp);     for (int i = temp * len_p - 1; i >= 0; i--) {       printf( %d  , i / len_p);     }   }   