/*   @JUDGE_ID:   1705PZ   755   C */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int sort_function(const void *a,const void *b)
{
	return(strcmp((char *)a,(char *)b));
}

char trans(char ch)
{
	if(ch >= '0' && ch <= '9')
		return ch;
	else if(ch == 'A' || ch == 'B' || ch == 'C')
		return '2';
	else if(ch == 'D' || ch == 'E' || ch == 'F')
		return '3';
	else if(ch == 'G' || ch == 'H' || ch == 'I')
		return '4';
	else if(ch == 'J' || ch == 'K' || ch == 'L')
		return '5';
	else if(ch == 'M' || ch == 'N' || ch == 'O')
		return '6';
	else if(ch == 'P' || ch == 'R' || ch == 'S')
		return '7';
	else if(ch == 'T' || ch == 'U' || ch == 'V')
		return '8';
	else if(ch == 'W' || ch == 'X' || ch == 'Y')
		return '9';
}

int main()
{
	int k,t,n,flag;
	long i,j,count;
	char **table;
	char string1[256],string2[256];

	scanf("%d",&t);
	while(t--)
	{
		count = 0;
		scanf("%d",&n);
		table = (char **)malloc(sizeof(char *) * n);
		for(i = 0;i < n;i++)
			*(table + i) = (char *)malloc(sizeof(char) * 8);
		while(n--)
		{
			scanf("%s",string1);
			for(i = 0,j = 0;string1[i];i++)
				if(('0' <= string1[i] && string1[i] <= '9') || ('A' <= string1[i] && string1[i] <= 'Z'))
					string2[j++] = trans(string1[i]);
			string2[j] = '\0';
			strcpy(*(table + count++),string2);
		}
		qsort((void **)table,count,sizeof(char*),sort_function);
*
		flag = 1;
		for(i = 0;i < count;i++)
		{
			strcpy(string2,*(table + i));
			for(j = i;j < count && !strcmp(string2,*(table+j));j++);
			if(j - i > 1)
			{
				for(k = 0;string2[k];k++)
				{
					if(k == 3)
						printf("-");
					printf("%c",*(*(table + i) + k));
				}
				printf(" %d\n",j - i);
				flag = 0;
			}
			i = j - 1;
		}
		if(flag)
			printf("No duplicates.\n");
		printf("\n");
		free(table);
	}

	return 0;
}
@END_OF_SOURCE_CODE
