import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class BaoyPoj1002Test {
static List<String> target = new ArrayList<String>();
static Map<String,Integer> result = new HashMap<String,Integer>();
@SuppressWarnings({ "unchecked", "rawtypes", "resource" })
public static void main(String args[]) throws Exception
{
// 耗时时间长,10000 个大约 6219MS 第一次写的什么都没有考虑似的
// init();
// operate();
// log();
// 耗时 4235MS 减少 2000ms 挺不错的 poj可以做一个 很不错的 测试平台,呵呵
Scanner in = new Scanner(System.in);
int a = in.nextInt();
for (int i = 0; i < a; i++) {
String string = in.next() ;
String temp= toResultString(string);
result.put(temp, result.get(temp)==null ?1: result.get(temp) +1 );
}
Set<String> set = new TreeSet(result.keySet());
boolean flag = false;
for (String key : set) {
if (result.get(key)>1) {
flag =true;
String keyformat = key.substring(0, 3) + "-"+ key.substring(3, key.length());
System.out.println(keyformat+" " + result.get(key));
}
}
if (!flag) {
System.out.println("No duplicates.");
}
}
// A-Z 65-90
static public char swapChar(char c) {
switch (c) {
case 65:
case 66:
case 67:
return '2';
case 68:
case 69:
case 70:
return '3';
case 71:
case 72:
case 73:
return '4';
case 74:
case 75:
case 76:
return '5';
case 77:
case 78:
case 79:
return '6';
case 80:
case 81:
case 82:
case 83:
return '7';
case 84:
case 85:
case 86:
return '8';
case 87:
case 88:
case 89:
return '9';
default:
return '0';
}
}
private static String toResultString(String string) {
String temp = "";
for (int j = 0; j < string.length(); j++) {
if (string.charAt(j) == '-') {
continue;
} else {
char achar = string.charAt(j);
if (achar >= '0' && achar <= '9') {
temp += achar;
} else {
temp += swapChar(achar);
}
}
}
return temp;
}
static Map<String,Integer> phoneMap = new HashMap<String,Integer>();
static{
phoneMap.put("A", 2); phoneMap.put("B", 2); phoneMap.put("C", 2);
phoneMap.put("D", 3); phoneMap.put("E", 3); phoneMap.put("F", 3);
phoneMap.put("G", 4); phoneMap.put("H", 4); phoneMap.put("I", 4);
phoneMap.put("J", 5); phoneMap.put("K", 5); phoneMap.put("L", 5);
phoneMap.put("M", 6); phoneMap.put("N", 6); phoneMap.put("O", 6);
phoneMap.put("P", 7); phoneMap.put("R", 7); phoneMap.put("S", 7);
phoneMap.put("T", 8); phoneMap.put("U", 8); phoneMap.put("V", 8);
phoneMap.put("W", 9); phoneMap.put("X", 9); phoneMap.put("Y", 9);
}
@SuppressWarnings({ "unused", "resource" })
private static void init() {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
for (int i = 0; i < a; i++) {
target.add(in.next());
}
}
@SuppressWarnings("unused")
private static void operate() {
for (String string : target) {
char[] aCharArr = stringOperate(string).toCharArray();
char[] newCharArr = new char[aCharArr.length] ;
int i=0;
for (char c : aCharArr) {
newCharArr[i++] = phoneMap.get(String.valueOf(c)) == null ? c: int2char(phoneMap.get(String.valueOf(c)));
}
result.put(String.valueOf(newCharArr ), result.get(String.valueOf(newCharArr)) == null ?1 : result.get(String.valueOf(newCharArr ))+1);
}
}
private static char int2char(int aint) {
return (char) (aint + 48);
}
private static String stringOperate( String string) {
string = string.replaceAll("-", "");
return string.substring(0, 3) + "-"+ string.substring(3, string.length());
}
@SuppressWarnings({ "unused", "unchecked", "rawtypes" })
private static void log() {
Set<String> set = new TreeSet(result.keySet());
boolean flag = false;
for (String key : set) {
if (result.get(key)>1) {
flag =true;
System.out.println(key+" " + result.get(key));
}
}
if (!flag) {
System.out.println("No duplicates.");
}
}
}