import Control.Monad (replicateM) import Data.List (nub) solve1 :: String -> String -> [Bool] -> String solve1 s s' (x : []) = s' ++ s solve1 s s' (x : xs) | x == True = solve1 (tail s) (s' ++ [head s]) xs | x == False = solve1 (init s) (s' ++ [last s]) xs solve2 :: Integral a => String -> a solve2 s = fromIntegral . length . nub . map (solve1 s "") $ replicateM (length s) [True, False] main = print . solve2 =<< getLine