RT. #1#2#3WA
#include<bits/stdc++.h>
using namespace std;
struct KMP{
int Next[1000010];
void search(string s){
s=" "+s;
int zzy=0;
int ks=s.size();
for(int i=2;i<ks;i++){
while(zzy&&s[zzy+1]!=s[i])zzy=Next[zzy];
if(s[zzy+1]==s[i])zzy++;
Next[i]=zzy;
}
}
void print(string s,string b){
int ks=s.size(),kb=b.size();
s=" "+s;
b=" "+b;
int j=0;
for(int i=1;i<=ks;i++){
while(j&&b[j+1]!=s[i]){
j=Next[j];
}
if(b[j+1]==s[i]){
j++;
}
if(j==kb){
cout<<i-kb+1<<endl;
}
}
for(int i=1;i<=kb;i++){
cout<<Next[i]<<" ";
}
}
};
int main(){
KMP kmp;
string a,b;
cin>>a>>b;
kmp.search(b);
kmp.print(a,b);
return 0;
}