17 lines
No EOL
307 B
Python
17 lines
No EOL
307 B
Python
import sys
|
|
|
|
s = sys.stdin.read().strip()
|
|
n = len(s)
|
|
|
|
z = [0] * n
|
|
z[0] = n
|
|
l, r = 0, 0
|
|
for i in range(1, n):
|
|
if i <= r:
|
|
z[i] = min(r - i + 1, z[i - l])
|
|
while i + z[i] < n and s[z[i]] == s[i + z[i]]:
|
|
z[i] += 1
|
|
if i + z[i] - 1 > r:
|
|
l = i
|
|
r = i + z[i] - 1
|
|
print(*(z)) |