求调
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int anext[maxn];
int j=0,i=0;
void build_next(string x){
int same=0;
i=1;
while (i<x.size()){
if (x[same]==x[i]){
same++;
anext[i]=same;
i++;
}
else{
if (same==0){
anext[i]=0;
i++;
}
else{
same = anext[i-1];
}
}
}
}
int main(){
string a,b;
cin >> a >> b;
build_next(b);
i=0;
while (i<a.size()){
if (a[i]==b[j]){
i++;
j++;
}
else if(j>0){
j=anext[j-1];
}
else{
i++;
}
if (j==b.size()){
cout << i-j+1 << "\n";
}
}
for (int i=0;i<b.size();i++){
cout << anext[i] << " ";
}
}