import java.io.*;
import java.util.*;
public class Main {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
Map<String, Integer> cnt = new HashMap<>();
void solution() throws Exception {
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
String str = br.readLine().split("\\.")[1];
cnt.put(str, cnt.getOrDefault(str, 0) + 1);
}
List<String> words = new ArrayList<>(cnt.keySet());
Collections.sort(words);
StringBuilder sb = new StringBuilder();
for (String w : words) {
sb.append(w + " " + cnt.get(w) + "\n");
}
System.out.println(sb);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
해시를 이용한 간단한 문제였다. 근데 split에 그냥 .을 매개변수로 넣으면 문자 .이 아니라 정규식 기호 .으로 해석하여 .단위로 문자열을 split하지 못했다. 이 때는 정규식 이스케이프 문자 \ \을 앞에 붙여주자.