#include <stdio.h>
#include <string.h>
#include <malloc.h>
using namespace std;
void Getnext(char* p,int* next);
int KMP(char* s,char* k){
int m=strlen(s);
int n=strlen(k);
int i=0;
int j=0;
int next[10000]={0};
Getnext(k,next);
while(i<m){
if(s[i]==k[j]){
i++;
j++;
}
else{
if(j>0){
j=next[j-1]+1;
}
else{
i++;
}
}
if(j==n){
printf("%d\n",i-j+1);
j=next[n-1]+1;
}
}
}
void Getnext(char* p,int* next){
int length=strlen(p);
next[0]=-1;
for(int i=1;i<length;i++){
int temp=next[i-1];
if(p[temp+1]==p[i]){
next[i]=temp+1;
}
while((temp>=0)&&(p[temp+1]!=p[i])){
temp=next[temp];
}
if(p[temp+1]==p[i]){
next[i]=temp+1;
}
else{
next[i]=-1;
}
}
}
int main(){
char s[1000000]={0};
char k[1000000]={0};
scanf("%s",s);
scanf("%s",k);
int a=KMP(s,k);
int u=strlen(k);
int temp[100000]={0};
Getnext(k,temp);
for(int i=0;i<u;i++){
printf("%d ",temp[i]+1);
}
return 0;
}