import java.util.Scanner;
import java.util.Stack;
import java.util.Arrays;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Set;
class Main{
int T
= Integer.
parseInt(br.
readLine().
trim()); int char2int[] = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,-1,7,7,8,8,8,9,9,9,-1};
for(int i = 1; i<=T; i++){
br.readLine();
int n
= Integer.
parseInt(br.
readLine().
trim()); HashMap
<String, Integer
> hm
= new HashMap
<>(); Stack<String> list = new Stack<String>();
for(int j = 1; j<=n; j++){
str = br.readLine().trim();
int c = 0;
for(int k = 0; k<str.length(); k++){
char ch = str.charAt(k);
if(ch!='-'){
int id = (int)ch - (int)'A';
if(Character.
isLetter(ch
)) temp
+=char2int
[id
]; else temp+=ch;
c++;
if(c == 3) temp+="-";
}
}
if(hm.containsKey(temp)){
hm.put(temp, hm.get(temp) + 1);
}
else {
hm.put(temp,1);
list.push(temp);
}
}
boolean check = false;
for (int c = 0; c < arr.length; c++) {
arr[c] = list.pop();
}
if(it>1){
sb.append(key + " " + it + "\n");
check = true;
}
}
if(!check)sb.append("No duplicates.\n");
if(i!=T) sb.append("\n");
}
}
}
aW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwppbXBvcnQgamF2YS51dGlsLlN0YWNrOwppbXBvcnQgamF2YS51dGlsLkFycmF5czsKaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwppbXBvcnQgamF2YS51dGlsLlNldDsKY2xhc3MgTWFpbnsKICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJncyBbXSkgdGhyb3dzIElPRXhjZXB0aW9uewogICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpOwogICAgaW50IFQgPSBJbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkudHJpbSgpKTsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOwogICAgaW50IGNoYXIyaW50W10gPSB7MiwyLDIsMywzLDMsNCw0LDQsNSw1LDUsNiw2LDYsNywtMSw3LDcsOCw4LDgsOSw5LDksLTF9OwogICAgCiAgICBmb3IoaW50IGkgPSAxOyBpPD1UOyBpKyspewogICAgICBici5yZWFkTGluZSgpOwogICAgICBpbnQgbiA9IEludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKS50cmltKCkpOwogICAgICBTdHJpbmcgc3RyID0gIiI7CiAgICAgIEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPiBobSA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgU3RhY2s8U3RyaW5nPiBsaXN0ID0gbmV3IFN0YWNrPFN0cmluZz4oKTsKICAgICAgCiAgICAgIGZvcihpbnQgaiA9IDE7IGo8PW47IGorKyl7CiAgICAgICAgc3RyID0gYnIucmVhZExpbmUoKS50cmltKCk7CiAgICAgICAgU3RyaW5nIHRlbXAgPSAiIjsKICAgICAgICBpbnQgYyA9IDA7CiAgICAgICAgCiAgICAgICAgZm9yKGludCBrID0gMDsgazxzdHIubGVuZ3RoKCk7IGsrKyl7CiAgICAgICAgICBjaGFyIGNoID0gc3RyLmNoYXJBdChrKTsKICAgICAgICAgIGlmKGNoIT0nLScpewogICAgICAgICAgICBpbnQgaWQgPSAoaW50KWNoIC0gKGludCknQSc7CiAgICAgICAgICAgIGlmKENoYXJhY3Rlci5pc0xldHRlcihjaCkpIHRlbXArPWNoYXIyaW50W2lkXTsKICAgICAgICAgICAgZWxzZSB0ZW1wKz1jaDsKICAgICAgICAgICAgYysrOwogICAgICAgICAgICBpZihjID09IDMpIHRlbXArPSItIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoaG0uY29udGFpbnNLZXkodGVtcCkpewogICAgICAgICAgaG0ucHV0KHRlbXAsIGhtLmdldCh0ZW1wKSArIDEpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIGhtLnB1dCh0ZW1wLDEpOwogICAgICAgICAgbGlzdC5wdXNoKHRlbXApOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgYm9vbGVhbiBjaGVjayA9IGZhbHNlOwogICAgICBTdHJpbmcgYXJyW10gPSBuZXcgU3RyaW5nW2xpc3Quc2l6ZSgpXTsKICAgICAgCiAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgYXJyLmxlbmd0aDsgYysrKSB7CiAgICAgICAgYXJyW2NdID0gbGlzdC5wb3AoKTsKICAgICAgfQogICAgICAKICAgICAgQXJyYXlzLnNvcnQoYXJyKTsKICAgICAgZm9yIChTdHJpbmcga2V5IDogYXJyKSB7IAogICAgICAgIEludGVnZXIgaXQgPSBobS5nZXQoa2V5KTsKICAgICAgICBpZihpdD4xKXsKICAgICAgICAgIHNiLmFwcGVuZChrZXkgKyAiICIgKyBpdCArICJcbiIpOwogICAgICAgICAgY2hlY2sgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZighY2hlY2spc2IuYXBwZW5kKCJObyBkdXBsaWNhdGVzLlxuIik7CiAgICAgIGlmKGkhPVQpIHNiLmFwcGVuZCgiXG4iKTsKICAgIH0KICAgIFN5c3RlbS5vdXQucHJpbnQoc2IpOwogIH0KfQ==