https://www.luogu.org/problem/P3375
#include<bits/stdc++.h>
#define ll long long
#define ri register int
#define M 1000005
using namespace std;
char t[M],p[M];
int lt,lp,j,nxt[M];
inline ll read(){
ll f=1,sum=0;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){sum=(sum<<1)+(sum<<3)+(ch^48);ch=getchar();}
return f*sum;
}
inline void GetNext(){
for(ri i=2;i<=lp;i++){
while(j&&p[i]!=p[j+1]) j=nxt[j];
if(p[i]==p[j+1]) j++,nxt[i]=j;
}
}
inline void KMP(){
j=0;
for(ri i=1;i<=lt;i++){
while(j&&t[i]!=p[j+1]) j=nxt[j];
if(t[i]==p[j+1]) j++;
if(j==lp) printf("%d\n",i-lp+1),j=nxt[j];
}
}
int main(){
scanf("%s",t+1),scanf("%s",p+1);
lt=strlen(t+1),lp=strlen(p+1);
GetNext();
KMP();
for(ri i=1;i<=lp;i++) printf("%d ",nxt[i]);
return 0;
}