program  a;
var  t:ansistring;
     j,k:longint;
	 next:array[0..100] of longint;

procedure  get_next;
begin
  j:=1; k:=0; next[1]:=0;
  while j<length(t) do
  if (k=0) or (t[j]=t[k]) then
      begin
        j:=j+1; k:=k+1; next[j]:=k;
      end
   else
     k:=next[k];
end;

begin
  readln(t);
  get_next;
  for  j:=1 to length(t) do
  write(next[j],' ');
end.

/**************************************************************
	Problem: 2151
	User: admin
	Language: Pascal
	Result: Wrong Answer
****************************************************************/