let ascii_p c = (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')

let uppercase_p c = c >= 'A' && c <= 'Z'

let lowercase c = Char.chr ((Char.code c) - (Char.code 'A') + (Char.code 'a'))

let plus tbl c =
  match
    try Some (Hashtbl.find tbl c) with _ -> None
  with
  | None -> Hashtbl.replace tbl c 1
  | Some n -> Hashtbl.replace tbl c (n + 1)

let print_tbl tbl =
  for i = Char.code 'a' to Char.code 'z' do
    let c = Char.chr i in
    match
      try Some (Hashtbl.find tbl c) with _ -> None
    with
    | None -> Printf.printf "%c : 0\n" c
    | Some n -> Printf.printf "%c : %d\n" c n
  done

let () =
  let l = read_line () in
  let tbl = Hashtbl.create ~random:true 26 in
  String.iter (fun c ->
    if ascii_p c then plus tbl (if uppercase_p c then lowercase c else c)
  ) l;
  print_tbl tbl