#include<iostream>
#include<string>
using namespace std;
const int N=100010;
char a[N],b[N];//主串 模式串
int kmp[N]; //kmp数组用来存放相同的前缀
int j=0;
int main(){
cin>>a+1>>b+1;
int al=strlen(a+1);//主串长度
int bl=strlen(b+1);//模式串长度
//处理kmp数组,首先让模式串自己匹配自己
kmp[1]=0; //kmp数组第一位是不用匹配的一定是0,因此从第二位开始匹配
for(int i=2;i<=bl;i++){
while(j&&b[i]!=b[j+1]) j=kmp[j]; //往前翻记录了相同的前缀j
if(b[i]==b[j+1]) j++; //匹配成功,j继续向后走
kmp[i]=j;
}
j=0; //指回开头
//主串与模式串匹配,一样的过程
for(int i=1;i<=al;i++){
while(j&&a[i]!=b[j+1]) j=kmp[j];
if(a[i]==b[j+1]) j++;//匹配成功
if(j==bl) cout<<i-bl+1<<endl; //直到j的长度与模式串相同,输出成功匹配所在的首位置
}
return 0;
}