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);
}
}
}