#include<bits/stdc++.h>
using namespace std;
int n,m,t,i,f[1001000];char a[1001000],b[1001000];
void vs(){
int n=strlen(b);
int i=0,j=0;
while(i<=n){
if(j==0||b[i-1]==b[j-1])f[++i]=j++;
else j=f[j];
}
}
int main(){
scanf("%s%s",a,b);
vs();
n=strlen(a);m=strlen(b);
t=0;f[1]=1;
for(i=0;i<n;i++){
if(a[i]==b[t]){
t++;if(t==m)printf("%d\n",i-m+2),t=f[t];
}else t=f[t+1];
}
for(i=1;i<=m;i++)printf("%d ",f[i]-1);
return 0;
}
样例过的,不知道错哪了