import Control.Applicative
import qualified Data.Map as M
import Data.Char
main = do
    lowerStr <- toLowerStr <$> getContents
    let regiMap = registerChar lowerStr
    mapM_ (\x -> putStrLn $ formatMap x regiMap) (M.keys regiMap)

initMap :: M.Map Char Integer
initMap = let a = map (\x -> (x, 0)) ['a'..'z']
          in M.fromList a

toLowerStr :: String -> String
toLowerStr = map (\x -> toLower x)

registerChar :: String -> M.Map Char Integer
registerChar = foldl (\acc x -> M.adjust (+1) x acc) initMap

formatMap :: Char -> M.Map Char Integer -> String
formatMap a mapp = [a] ++ " : " ++ show ((M.!) mapp a)