/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	private static Map<String, Double> W = new HashMap<String, Double>();
	private static Scanner in = new Scanner(System.in);
	SortedMap<Double, List<Object>> SW = new TreeMap<Double, List<Object>>();
	public static String max(String [] args){
		double max = 0;
		String res = new String();
		for(String a  : args){
			if(W.containsKey(a)) if(W.get(a) > max){ max = W.get(a); res = a;}
		}
		return res;
	}
	public static void main (String[] args) throws java.lang.Exception
	{
		
		String txt = new String();
		long all = 0;
		in.useDelimiter("[—,.!:;? \n«»()\"]");
		while(in.hasNext()){
			txt = in.next();
				if(!txt.equals("") && !txt.equals("-")){
					String buf = txt.toLowerCase();
					if(W.containsKey(buf)){ W.put(buf, W.get(buf) + 1.0); all++;} 
					else{ W.put(buf, 1.0); all++;}
				}
		}
		
		
		System.out.println(all);
		// for(String a : W.keySet())  W.put(a, W.get(a)/all);
		
		
		SortedMap<Double, List<Object>> SW = new TreeMap<Double, List<Object>>();
		
		for(Object a : W.keySet()) 
			if(SW.containsKey(W.get(a))){
				SW.get(W.get(a)).add(a);
			}
			else{
				List<Object> buf = new ArrayList<Object>();
				buf.add(a);
				SW.put(W.get(a), buf) ;
			}
		String [] arr = {"the","a","table"};
		try{
			//System.outmax(arr);
		}
		catch(Exception e){
			System.out.println(e);
		}
		
		for(Object a : SW.keySet()){
			System.out.print(a + " => " );
			int n = SW.get(a).size();
			for(int i = 0; i < n; i++){
				System.out.print(SW.get(a).get(i) + (i == n - 1? ".\n" : ", "));
			}
		}
	}
}