import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.Map.Entry;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String s=sc.next();
StringBuffer sb=new StringBuffer();
TreeMap<Character,Integer> tmp=new TreeMap<Character,Integer>();
sb.append(s.charAt(0));
for(int i=1;i<s.length();i++) {
if(s.charAt(i)!=s.charAt(i-1)) {
sb.append(" ");
sb.append(s.charAt(i));
}
else {
sb.append(s.charAt(i));
}
}
String s1=sb.toString();
String[] s2=s1.split(" ");
for(int i=0;i<s2.length;i++) {
if(s2[i].length()>1) {
for(int j=0;j<s2[i].length();j++) {
if(tmp.containsKey(s2[i].charAt(j))) {
tmp.put(s2[i].charAt(j), tmp.get(s2[i].charAt(j))+1);
}
else {
tmp.put(s2[i].charAt(j), 1);
}
}
}
}
List<Map.Entry<Character, Integer>> list = new ArrayList<Map.Entry<Character, Integer>>(tmp.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
//降序排序
@Override
public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) {
//return o1.getValue().compareTo(o2.getValue());
return o2.getValue().compareTo(o1.getValue());
}
});
for (Entry<Character, Integer> mapping : list) {
System.out.println(mapping.getKey() + ":" + mapping.getValue());
}
}
}