#include<stdio.h>
#include<string.h>
#define S 10000
#define T 100
int next[T]={0};
void get_next(char t[],int next[])
{
    int i=0,j=-1;
    while(t[i+1]!='\0')
    {
        if(j==-1||t[i]==t[j])
        {
            ++i;++j;
            next[i]=j+1;
        }
        else
            j=next[j]-1;
    }
}
void get_nextval(char t[],int next[])
{
    int i=0,j=-1;
    while(t[i+1]!='\0')
    {
        if(j==-1||t[i]==t[j])
        {
            ++i;++j;
            if(t[i]!=t[j])
                next[i]=j+1;
            else
                next[i]=next[j];
        }
        else
            j=next[j]-1;
    }
}
int kmp(char s[],char t[],int pos)
{
    int i=pos-1,j=0,a=strlen(s),b=strlen(t);
    while(i<=a-1&&j<=b-1)
    {
        if(j==-1||s[i]==t[j])
        {++i;++j;}
        else
            j=next[j]-1;
    }
    if(j==b)
        return i-j+1;
    else
        return 0;
}
int main()
{
  int i,l;  char s[S],t[T];
    gets(t);
    get_next(t,next);
    //get_nextval(t,next);
    l=strlen(t);
  for(i=0;i<=l-1;i++)
  printf("%d ",next[i]);
  printf("\n");  
  return 0;
}

/**************************************************************
	Problem: 2151
	User: admin
	Language: C
	Result: Accepted
	Time:11 ms
	Memory:1036 kb
****************************************************************/