#include #include #include using namespace std; typedef long long LL; const int kMaxN = 1e6 + 10; char S[kMaxN], T[kMaxN]; int nxt[kMaxN]; int main() { #ifdef local freopen("pro.in", "r", stdin); #endif scanf("%s%s", S + 1, T + 1); int len_T = strlen(T + 1); for (int i = 2, j = 0; i <= len_T; i++) { while (j > 0 && T[j + 1] != T[i]) j = nxt[j]; if (T[j + 1] == T[i]) j++; nxt[i] = j; } int len_S = strlen(S + 1); for (int i = 1, j = 0; i <= len_S; i++) { while (j > 0 && (j == len_T || T[j + 1] != S[i])) j = nxt[j]; if (T[j + 1] == S[i]) j++; if (j == len_T) printf("%d\n", i - len_T + 1); } for (int i = 1; i <= len_T; i++) printf("%d ", nxt[i]); return 0; }