public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        ArrayList<String> list = new ArrayList<>();
        LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
        while (sc.hasNextLine()){
            String str = sc.nextLine();
            if("".equals(str)){
                break;
            }
            //地址和行号区分,0是地址,1是行号
            String[] strings = str.split(" ");
            //地址截取,\需要用\\\\转义
            String[] addres = strings[0].split("\\\\");
            //截取后16位字符
            String s = getLast(addres);
            //和数字组成新的字符串
            StringBuilder sb = new StringBuilder();
            String sNew = sb.append(s).append(" ").append(strings[1]).toString();
            if(map.containsKey(sNew)) {
                map.put(sNew, map.get(sNew) + 1);
            }else{
                map.put(sNew,1);
                list.add(sNew);
            }
        }
        if(map.size() <= 8){
            for(Map.Entry<String,Integer> entry : map.entrySet()){
                System.out.println(entry.getKey()+" "+entry.getValue());
            }
        }else{
            for (int i = list.size() - 8; i < list.size(); i++) {
                System.out.println(list.get(i)+" "+map.get(list.get(i)));
            }
        }
    }

    private static String getLast(String[] addres) {
        if(addres[addres.length - 1].length() < 16){
            return addres[addres.length - 1];
        }else{
            return addres[addres.length - 1].substring(addres[addres.length - 1].length() - 16);
        }
    }
}