def manacher(s):
s = '#' + '#'.join(s) + '#'
radis = [0] * len(s)
maxlen, pos, max_right = 0, 0, 0
for i in range(len(s)):
if i < max_right:
radis[i] = min(max_right - i, radis[pos * 2 - i])
else:
radis[i] = 1
while i - radis[i] >= 0 and i + radis[i] < len(s) and s[i - radis[i]] == s [i + radis[i]]:
radis[i] += 1
if i - 1 + radis[i] > max_right:
max_right = i - 1 + radis[i]
pos = i
maxlen = max(maxlen, radis[i])
return maxlen-1
if __name__ == "__main__":
print(manacher('cabaabaabaa'))