#include <bits/stdc++.h>   using namespace std;   const int maxn = 2e3 + 10, oo = maxn;   int n, m;   char s[maxn], t[maxn];   int a[maxn];   int dp[maxn][maxn];   void myMax(int &a, int b) {     if (a < b) {       a = b;     }   }   int main() {     int i, j, k, x, y;     scanf( %s , s + 1);     n = strlen(s + 1);     scanf( %s , t + 1);     m = strlen(t + 1);     for (i = n; i >= m; i--) {       for (j = i, k = 0; j; j--) {         if (s[j] == t[m - k] && ++k == m) {           break;         }       }       a[i] = k == m ? i - j + 1 : oo;     }     for (; i; i--) {       a[i] = oo;     }     dp[0][0] = 0;     for (i = (1); i <= (n); i++) {       for (j = (0); j <= (i); j++) {         dp[i][j] = 0;         if (j < i) {           dp[i][j] = dp[i - 1][j];         }         if (j) {           myMax(dp[i][j], dp[i - 1][j - 1]);         }         if (a[i] != oo && (y = j - a[i] + m) >= 0 && (x = i - a[i]) >= y) {           myMax(dp[i][j], dp[x][y] + 1);         }       }     }     for (i = (0); i <= (n); i++) {       printf( %d%c , dp[n][i],    n [i == n]);     }     return 0;   }   