#include
#include
#include
using namespace std;
char s1[1000000];
char s2[1000];
int next[1000];
void read()
{
char temp[1000000];
scanf("%s",&temp);
int len=strlen (temp);
s1[0]=len;
for (int i=0;i<len;i++)
s1[i+1]=temp[i];
scanf("%s",&temp);
len=strlen (temp);
s2[0]=len;
for (int i=0;i<len;i++)
s2[i+1]=temp[i];
return;
}
void kmp_next()
{
int i=1;
int j=0;
next[1]=0;
while (i<s2[0])
{
if (j==0||s2[i]==s2[j])
{
i++;
j++;
next[i]=j;
}
else j=next[j];
}
return;
}
void kmp()
{
int i=1;
int j=1;
while (j<=s1[0])
{
if (j==1||s1[i]==s1[j])
{
i++;
j++;
}
else i=next[i];
if (i==s2[0]&&s1[i]==s1[j])
{
printf ("%d\n",j);
}
}
return;
}
void pri_next()
{
for (int i=0;i<s2[0];i++)
printf ("%d ",next[i]);
}
int main()
{
read();
kmp_next();
kmp();
pri_next();
return 0;
}
//要求输出next数组