#include<bits/stdc++.h>
using namespace std;
char a[1000011],b[1000011];
int a1,b1;
int p[1000011];
void pre()
{
int j=0;
for(int i=1;i<b1;i++)
{
while(b[j+1]!=b[i+1]&&j>0) j=p[j];
if(b[j+1]==b[i+1])
{
j++;
}
p[i+1]=j;
}
}
int main()
{
cin>>a+1>>b+1;
a1=strlen(a+1);
b1=strlen(b+1);
pre();
int j=0;
for(int i=0;i<a1;i++)
{
while(j>0&&a[i+1]!=b[j+1]) j=p[j];
if(a[i+1]==b[j+1])
{
j++;
}
if(j==b1)
{
cout<<i-b1+2<<endl;
j=p[j];
}
}
for(int i=1;i<=b1;i++)
{
cout<<p[i]<<" ";
}
return 0;
}
测第八个点时a1会莫名小很多,怎么改都不行