import java.util.Scanner;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Map<ErrorRecord, Integer> map = new LinkedHashMap<>();
        while (in.hasNextLine()) {
            // 重写 ErrorRecord 的 hashcode 和 equals 方法 在map中已经存在了错误记录 则记录数+1 
            map.compute(new ErrorRecord(in.nextLine()), (k, v) -> v == null ? 1 : ++v);
        }
        solution(map);
    }

    public static void solution(Map<ErrorRecord, Integer> map) {
        int cur = 0;
        int size = map.size();
        for (Map.Entry<ErrorRecord, Integer> entry : map.entrySet()) {
            // 打印最后8个
            if (size - cur <= 8) {
                System.out.println(entry.getKey() + " " + entry.getValue());
            }
            cur++;
        }
    }

    private static class ErrorRecord {

        private String name;

        private int line;

        public ErrorRecord(String s) {
            String[] temp = s.split(" ");
            String fileName = temp[0].substring(temp[0].lastIndexOf("\\") + 1);
            this.name = fileName.length() > 16 ? fileName.substring(
                            fileName.length() - 16) : fileName;
            this.line = Integer.parseInt(temp[1]);
        }

        @Override
        public boolean equals(Object er) {
            return name.equals(((ErrorRecord) er).name) && line == ((ErrorRecord) er).line;
        }

        @Override
        public int hashCode() {
            return (this.name + " " + this.line).hashCode();
        }

        @Override
        public String toString() {
            return this.name + " " + this.line;
        }

    }
}