import Control.Monad import qualified Data.Map as M import Data.Char import Data.List import Data.Function defaultTable :: M.Map Char Char defaultTable = M.fromList [(g,c) | (c,g) <- [('a','y'),('o','e'),('z','q')]] makeTable :: String -> M.Map Char Char makeTable s = M.union defaultTable (M.fromList (zip h r2)) where h = map fst $ sortBy (flip compare `on` snd) $ M.toList $ M.delete 'y' $ M.delete 'e' $ M.delete 'q' $ calc s r2 = filter (\c -> not (c `elem` "aoz")) ranking calc :: String -> M.Map Char Int calc s = M.fromListWith (+) [(c,1) | c<-s, isLetter c] ranking :: [Char] ranking = "eiatnsorldchumpfgywkvbjqxz" conv :: M.Map Char Char -> String -> String conv m s = map f s where f c = case M.lookup c m of Nothing -> c Just c' -> c' main :: IO () main = do n <- readLn xs <- replicateM n getLine let h = calc $ unlines xs return () sample = ["ejp mysljylc kd kxveddknmc re jsicpdrysi" ,"rbcpc ypc rtcsra dkh wyfrepkym veddknkmkrkcd" ,"de kr kd eoya kw aej tysr re ujdr lkgc jv"]