#include<iostream>
#include<string>
#include<cstring>
#define MAXN 10000007
using namespace std;
string s, p;
int nxt[10000001];
void next(string a,int *b) {
int len = a.length();
int now = 0, i = 1;
while (i < len) {
if (a[i] == a[now]) {
b[i] = b[i - 1] + 1;
i++;
now++;
}
else if (b[now - 1]) {
now = b[now - 1];
}
else
i++;
}
}
int main() {
memset(nxt, 0, sizeof(nxt));
for (char ch = getchar(); ch != '\n' && ch != EOF; ch = getchar()) s.push_back(ch);
for (char ch = getchar(); ch != '\n' && ch != EOF; ch = getchar()) p.push_back(ch);
//getline(cin,s);
//getline(cin,p);
next(p,nxt);
int tar = 0, pos = 0;
while (tar < s.length()) {
if (s[tar] == p[pos]) {
tar++; pos++;
}
else if (pos)
pos = nxt[pos - 1];
else {
tar++;
}
if (pos == p.length()) {
printf("%d\n", tar - pos + 1);
pos = nxt[pos - 1];
}
}
for (int i = 0; i < p.length(); i++)
printf("%d ", nxt[i]);
return 0;
}
rt,开始觉得可能是getline的问题,于是参考其他大佬的方法更改了读入方式,还是wa