import Data.List (inits, tails) allPartialLists :: [a] -> [[a]] allPartialLists = filter (not . null) . concatMap inits . tails isPalindromic :: Eq a => [a] -> Bool isPalindromic xs = xs == reverse xs longestPalindrome :: String -> Int longestPalindrome s = (maximum . filter (< length s) . map length . filter isPalindromic . allPartialLists) s main :: IO () main = print . longestPalindrome =<< getLine