//数组下标从0开始
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1000001;
char s1[N],s2[N];
int kmp[N];
int main()
{
scanf("%s",s1);
scanf("%s",s2);
int i,len;
len=0;
for(i=1;i<strlen(s2);i++)
{
// if(s2[i]==s2[len])
// {
// len++;
// kmp[i]=len;
// }
// else
// {
// len=0;
// kmp[i]=0;
// }
while(len!=0&&s2[i]!=s2[len])
len=kmp[len-1];
if(s2[i]==s2[len])
len++;
kmp[i]=len;
}
len=0;
for(i=0;i<strlen(s1);i++)
{
while(len!=0&&(len==strlen(s2)||s1[i]!=s2[len]))
len=kmp[len-1];
if(s1[i]==s2[len])
len++;
if(len==strlen(s2))
printf("%d\n",i-strlen(s2)+2);
}
for(i=0;i<strlen(s2);i++)
printf("%d ",kmp[i]);
return 0;
}