import Control.Monad (liftM, forM_) import Text.Printf type Pattern = [[Char]] match :: Pattern -> String -> Bool match [] [] = True match (xs:xss) (c:cs) = c `elem` xs && match xss cs match _ _ = False readPattern :: String -> Pattern readPattern [] = [] readPattern ('(':xs) = case span (/=')') xs of (ys, _:zs) -> ys : readPattern zs readPattern (c:xs) = [c] : readPattern xs main :: IO () main = do x:xs <- liftM lines getContents let [l,d,n] = map read $ words x (ws, ys) = splitAt d xs tests = map readPattern ys forM_ (zip [(1::Int)..n] tests) $ \(n,t) -> printf "Case #%d: %d\n" n (length (filter (match t) ws))