uses Math; const maxn = 1000000; var i, l, r, n: longint; s: string; z: array [1..maxn] of longint; begin readln(s); n := length(s); s := s + #0; l := 1; r := 1; for i := 2 to n do begin if i < r then z[i] := min(z[i - l + 1], r - i) else z[i] := 0; while s[1 + z[i]] = s[i + z[i]] do z[i] := z[i] + 1; l := i; r := i + z[i]; end; for i := 1 to n do write(z[i], ' '); end.