小一点的
#include<bits/stdc++.h>
//#pragma GCC optimize(3,"Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,fma,popcnt,tune=native")
using namespace std;
#define int long long
#define kg putchar(' ')
#define endl puts("")
inline int read(){
int vis=1,ans=0;
char x=getchar();
while(x<'0'||x>'9'){
if(x=='-')vis=-1;
x=getchar();
}
while(x>='0'&&x<='9'){
ans=(ans<<1)+(ans<<3)+x-'0';
x=getchar();
}
return vis*ans;
}
inline void print(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)print(x/10);
putchar(x%10+'0');
}
string a,b;
int n,m;
const int N=2090;
int dp[N][N];
int fre[N];
int num;
signed main(){
cin>>a>>b;
n=a.size(),m=b.size();
a=" "+a,b=" "+b;
for(int i=1;i<=n-m+1;i++){
int vis=1;
for(int j=1;j<=m;j++){
if(a[i+j-1]!=b[j]){vis=0;break;}
}
if(vis==1)num++,i+=m-1;
}
print(num),kg;
for(int i=1;i<=n;i++){
int j=i,k=m;
while(j&&k){
if(a[j]==b[k])k--;
if(!k)break;
j--;
}
if(!k)fre[i]=j;
}
for(int i=1;i<=n;i++){
dp[i][0]=dp[i-1][0];
for(int j=1;j<=n;j++){
if(i-j<m)continue;
dp[i][j]=max(dp[i-1][j-1],dp[i-1][j]);
if(fre[i]&&j>=(i-fre[i]+1-m)){
dp[i][j]=max(dp[i][j],dp[fre[i]-1][j-(i-fre[i]+1-m)]+1);
}
}
}
for(int i=1;i<=n;i++)print(dp[n][i]),kg;
return 0;
}