#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 %dn",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 ;}