#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int KMP(char* big, char* small, int NEXT[]);
void Next(int Next[], char* S2);
int main()
{
char S1[1000010];
char S2[1000010];
cin>>S1;
cin>>S2;
int next[1000010];
memset(next, 0, sizeof(next));
Next(next, S2);
KMP(S1, S2, next);
for (int i = 0; i < strlen(S2); i++) printf("%d ", next[i]);
return 0;
}
int KMP(char* big, char* small, int NEXT[])
{
char cnt[50];
for (int i = 0, j = 0; i < strlen(big); i++) {
while (j > 0 && big[i] != small[j]) {
j = NEXT[j - 1];
}
if (big[i] == small[j]) j++;
if (j == strlen(small)) {
printf("%d\n", i-j+2);
}
}
return 0;
}
void Next(int Next[], char* S2)
{
Next[0] = 0;
for (int i = 1, j = 0; i < strlen(S2); i++) {
while (j > 0 && S2[j] != S2[i]) {
j = Next[j - 1];
}
if (S2[j] == S2[i]) j++;
Next[i] = j;
}
}