void getnext()
{
int l=strlen(s2);
int i=0,j=-1;
next[0]=-1;
while(i<l)
{
if(j==-1||s2[i]==s2[j])
next[++i]=++j;
else j=next[j];
}
}
bool in()
{
int l=strlen(s2),l1=strlen(s1);
int i=0,j=0;
while(i<l1)
{
if(j==-1||s1[i]==s2[j])
{
i++;
j++;
}
else
{
j=next[j];
}
}
if(j==l) return true;
return false;
}
int main()
{
scanf("%s%s",s1,s2);
getnext();
int l=strlen(s2),l1=strlen(s1);
int i=0,j=0;
while(i<l1)
{
if(j==-1||s1[i]==s2[j])
{
i++;
j++;
}
else
{
j=next[j];
}
if(j==l) printf("%d\n",i-l+1);
}
for(int i=1;i<=l;i++) printf("%d ",next[i]);
return 0;
}