import Control.Applicative import Control.Monad import Data.List calc :: String -> Int calc s = minimum $ map fst $ concatMap (\ (dis,str) -> map (diffstr "problem" dis) $ take ((length str)-6) $ tails str ) $ map (diffstr "good" 0) $ take ((length s)-10) $ tails s where diffstr :: String -> Int -> String -> (Int,String) diffstr "" distance srcstr = (distance,srcstr) diffstr targetstr@(x:xs) distance srcstr@(y:ys) | x == y = diffstr xs distance ys | otherwise = diffstr xs (distance+1) ys main = do _:sl <- lines <$> getContents mapM_ (print . calc) sl