#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
const int N=1e6+10;
int n,m;
int p[N];
string s1,s2;
void pre(){
int j=0;
for(int i=1;i<m;i++){
while(j>0&&s2[j+1]!=s2[i+1])j=p[j];
if(s2[j+1]==s2[i+1])j++;
p[i+1]=j;
}
}
void kmp(){
int j=0;
for(int i=0;i<n;i++){
while(j>0&&s2[j+1]!=s1[i+1])j=p[j];
if(s2[j+1]==s1[i+1])j++;
if(j==m){
cout<<i+1-m+1<<"\n";
j=p[j];
}
}
}
signed main(){
cin>>s1>>s2;
s1=' '+s1;
s2=' '+s2;
n=s1.length()+1;
m=s2.length()+1;
pre();
kmp();
for(int i=1;i<m-1;i++){
cout<<p[i]<<' ';
}
return 0;
}
kmp出错,p数组对的