key自动排序
import java.io.*;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class Main
{
static PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
static Map<Character,Integer> map = new HashMap<>();
public static void main(String[] args) throws IOException
{
char s[] = rd.next().toCharArray();
for(int i = 0 ; i < s.length ; i ++)
{
if(map.get(s[i]) == null) map.put(s[i],1);
else map.put(s[i],map.getOrDefault(s[i],0) + 1);
}
for(Character x: map.keySet())
{
pw.println(x + ":" + map.get(x));
}
pw.flush();
}
}
class rd
{
static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer tokenizer = new StringTokenizer("");
// nextLine()读取字符串
static String nextLine() throws IOException { return reader.readLine(); }
// next()读取字符串
static String next() throws IOException
{
while (!tokenizer.hasMoreTokens()) tokenizer = new StringTokenizer(reader.readLine());
return tokenizer.nextToken();
}
// 读取一个int型数值
static int nextInt() throws IOException { return Integer.parseInt(next()); }
// 读取一个double型数值
static double nextDouble() throws IOException { return Double.parseDouble(next()); }
// 读取一个long型数值
static long nextLong() throws IOException { return Long.parseLong(next());}
// 读取一个BigInteger
static BigInteger nextBigInteger() throws IOException
{
BigInteger d = new BigInteger(rd.nextLine());
return d;
}
}