1 #include<iostream>
2 #include<cstdio>
3 #include<cmath>
4 #include<cstring>
5 #include<cstdio>
6 using namespace std;
7 const int maxn = 1000000 + 10 ;
8 char A[maxn],B[maxn];
9 int p[maxn];
10 int n,m;
11 void kmp()
12 {
13 int j(0);
14 for(int i=0;i<n;i++)
15 {
16 while(j>0 && B[j+1]!=A[i+1] ) j = p[j];
17 if(B[j+1]==A[i+1]) j++;
18 if(j==m)
19 {
20 printf("%d\n",i+1-m+1);
21 j=p[j];
22 }
23 }
24 }
25 int main()
26 {
27 scanf("%s %s",A+1,B+1);
28 p[1]=0;
29 n=strlen(A+1),m=strlen(B+1);
30 int j(0);
31 p[1]=0;
32 for(int i=1;i<m;i++)
33 {
34 while(j>0 && B[j+1]!=B[i+1]) j=p[j];
35 if(B[j+1]==B[i+1]) j++;
36 p[i+1]=j;
37 }
38 kmp();
39 for(int i=1;i<=m;i++) printf("%d ",p[i]);
40 return 0;
41 }