import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
public class Main {
/**
* 以下方法主要完成以下功能:
* 如果是一個數字,則直接返回,如果只一個字符,則返回它對應的數字
* @param c
* @return
*/
public static char getNum(char c) {
//如果這個字符是一個數字,則直接返回
if (Character.isDigit(c)) {
return c;
}
//如果這個字符是A或B或C,則返回2.以下規則類似
if (c == 'A' || c == 'B' || c == 'C') {
return '2';
}
if (c == 'D' || c == 'E' || c == 'F') {
return '3';
}
if (c == 'G' || c == 'H' || c == 'I') {
return '4';
}
if (c == 'J' || c == 'K' || c == 'L') {
return '5';
}
if (c == 'M' || c == 'N' || c == 'O') {
return '6';
}
if (c == 'P' || c == 'R' || c == 'S') {
return '7';
}
if (c == 'T' || c == 'U' || c == 'V') {
return '8';
}
if (c == 'W' || c == 'X' || c == 'Y') {
return '9';
}
return '#';
}
public static void main(String[] args) throws IOException {
//DataInputStream(InputStream in).使用指定的底層 InputStream 創建一個 DataInputStream。
DataInputStream scan = new DataInputStream(new BufferedInputStream(System.in));
//TreeMap() .使用鍵的自然順序構造一個新的、空的樹映射。
Map< String, Integer> tm = new TreeMap();
int n = Integer.parseInt(scan.readLine().trim());
for (int i = 0; i < n; i++){
//將輸入號碼中的"-"去掉
String s = scan.readLine().replace("-", "");
StringBuilder sb = new StringBuilder();
for (int k = 0; k < s.length(); k++) {
//得到的c可能是數字、#
char c = getNum(s.charAt(k));
//isDigit(char ch).確定指定字符是否為數字。
/**
* if語句的主要邏輯是:
* 如果c是數字,則將他加入到標准號碼串中
*/
if (Character.isDigit(c)) {
sb.append(c);
}
}
//將字符串轉換成標准形式的號碼
String result = sb.toString().substring(0, 3) + '-' + sb.toString().substring(3);
//containsValue(Object value) . 如果此映射為指定值映射一個或多個鍵,則返回 true。
/**
* if···else主要完成以下邏輯
* 1)判斷TreeMap裡面是否應含有這個號碼,如果有,則將其對應的次數+1.
* 2)如果沒有,則將該號碼的次數設置為1
*/
if (tm.containsKey(result)) {
//get(Object key) .返回指定鍵所映射的值
//,如果對於該鍵而言,此映射不包含任何映射關系,則返回 null。
int count = tm.get(result) + 1;
tm.put(result, count);
} else {
//TreeMap中還沒有該號碼,將該號碼的次數設置為1
tm.put(result, 1);
}
}
//keySet().返回此映射包含的key的 Set 視圖。
Set se = tm.keySet();
Iterator it = se.iterator();
boolean flag = false;
while (it.hasNext()) {
String s = it.next().toString();
int count = tm.get(s);
/**
* 以下if語句主要完成以下功能:
* 如果出現次數大於1,則將號碼及它的出現次數打印出來
*/
if (count > 1) {
flag = true;
System.out.println(s + " " + count);
}
}
//如果所有標准形式的號碼都沒有重復的
//則輸出No duplicates.
if (!flag) {
System.out.println("No duplicates. ");
}
}
}