module Main where
--import Debug.Trace
import Data.List
import Data.Char
import Data.Array
import Data.Maybe
import Data.Ord
import Control.Monad

solve :: String -> [(Int, Int)]
solve s = assocs (iter (listArray (0,25) (replicate 26 0)) s) where
    iter ar [] = ar
    iter ar (c:cs) = iter (incr ar c) cs
    incr ar c = case maybeIdx c of
        Just x  -> ar // [(x, ar ! x + 1)]
        Nothing -> ar
    maybeIdx c = case generalCategory c of
        LowercaseLetter -> Just (ord c - ord 'a')  
        UppercaseLetter -> Just (ord c - ord 'A')
        _ -> Nothing
                
main :: IO() 
main = do
    l   <- getContents
    mapM_ putStrLn $ map (\(i, e)-> chr (i+ord 'a'):" : "++show e) (solve l)

