#include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <cmath> #include <iostream> #include <algorithm> #include <functional> #include <string> using namespace std; char get(char c) { switch(c) { case 'A': case 'B': case 'C': return '2'; case 'D': case 'E': case 'F': return '3'; case 'G': case 'H': case 'I': return '4'; case 'J': case 'K': case 'L': return '5'; case 'M': case 'N': case 'O': return '6'; case 'P': case 'R': case 'S': return '7'; case 'T': case 'U': case 'V': return '8'; case 'W': case 'X': case 'Y': return '9'; } return ' '; } struct In { char num[10]; }s[100010]; int cmp ( const void *a , const void *b ) { return strcmp( (*(In *)a).num , (*(In *)b).num ); } int main() { int n,m; scanf("%d",&n); while(n--) { scanf("%d",&m); char tmp[100000]; for(int i=0;i<m;i++) { scanf("%s",tmp); int len=strlen(tmp); int index=0; for(int j=0;j<len;j++) { if('0'<=tmp[j]&&tmp[j]<='9') { s[i].num[index++]=tmp[j]; } else if('A'<=tmp[j]&&tmp[j]<='Z') { s[i].num[index++]=get(tmp[j]); } } } qsort(s,m,sizeof(s[0]),cmp); bool flag=true; for(int i=0;i<m;i++) { int con=1; for(int j=i+1;j<m;j++) { if(strcmp(s[i].num,s[j].num)==0) { con++; i=j; } else { break; } } if(con==1) continue; printf("%c%c%c-%c%c%c%c %d\n",s[i].num[0],s[i].num[1],s[i].num[2],s[i].num[3],s[i].num[4],s[i].num[5],s[i].num[6],con); flag=false; } if(flag) printf("No duplicates.\n"); if(n!=0) printf("\n"); } return 0 ; }