import Data.List (isPrefixOf) palis (x:xs) = 1 : inner 1 [x] xs where inner _ _ [] = [] inner n rs (x:xs) = (if isPrefixOf rs (x:xs) then (n*2 :) else id) $ (if isPrefixOf rs xs then (n*2+1 :) else id) $ inner (n+1) (x:rs) xs compute src = length ans where len = length src l1s = palis $ take (len-3) src l1l2s = [ l1 + l2 | l1 <- l1s, let rest = drop l1 (take (len-2) src), l2 <- palis rest ] l3s = palis $ reverse $ drop 3 src ans = [ () | l1l2 <- l1l2s, l3 <- takeWhile (len - l1l2 >) l3s] main = do l <- getLine print $ compute l