import Data.List
import Data.Char
main = do
      s <- getContents
      let v = map (return . toLower) s :: [String]
      mapM_ putStrLn (cntChar v)

cntChar :: [String] -> [String]
cntChar s = let rst=filter (\x->fst x >="a" && fst x <="z")$ map (\x-> (head x,length x)) $ group $ sort s
                in [c2s rst [c]| c<-['a'..'z']]
  where
        c2s :: [(String,Int)] -> String -> String
        c2s rst c = if (iskey rst c) then
                                      c ++ " : "++ (show (val' rst c))
                                  else
                                      c ++ " : "++ "0"     

iskey :: [(String,Int)] -> String -> Bool
iskey a s = elem s $ keys a

val' :: [(String,Int)] -> String -> Int
val' a s =
   snd $ head $ dropWhile (\x-> (fst x) /= s) $ a

keys :: [(String,Int)] -> [String]
keys a = map fst a

values:: [(String,Int)] -> [Int]
values a = map snd a