import Data.List import qualified Data.ByteString.Char8 as B import qualified Data.Set as S main = do s <- B.getLine getLine cs <- B.lines <$> B.getContents print (searchString s cs) searchString s cs = sum (unfoldr check s) where cs' = S.fromList cs check s' | B.null s' = Nothing | otherwise = Just ((length . filter id . map (flip S.member cs')) sk', B.tail s') where sk' = [B.take k s' | k<-[1 .. min 10 (B.length s')]]