#include <iostream>
#include <string>
#include <map>
#include <algorithm> // for sort
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <sstream>
using namespace std;
bool stringCompare(pair<string,int> a,pair<string,int> b);
int converToInt8(string str);
int encoding(char ch);
bool pairCompare(pair<int,int> a,pair<int,int> b);
int main()
{
int dataSetsNum;
cin>>dataSetsNum;
for(int i=0;i<dataSetsNum;i++){
string str;
int convertedInt8;
//cin>>str;
map<int,int> M;
int linesNum;
cin>>linesNum;
for(int j=0;j<linesNum;j++){
cin>>str;
convertedInt8 = converToInt8(str);
//char str8[8] = convertedStr.c_str()
M[convertedInt8]++;
}
map<int,int>::iterator it;
vector< pair<int,int> > V;
for(it=M.begin();it!=M.end();it++){
if(it->second>1){
V.push_back(pair<int,int>(it->first,it->second));
}
}
sort(V.begin(),V.end(),pairCompare);
vector< pair<int,int> >::iterator vit;
for(vit=V.begin();vit!=V.end();vit++){
int first3digits = vit->first/10000;
int last4digits = vit->first%10000;
cout<<first3digits<<"-"<<last4digits<<" "<<vit->second<<endl;
}
}
return 0;
}
int converToInt8(string str)
{
string convertedStr="";
//int ptr=0;
for(int i=0;i<str.length();i++){
if(isdigit(str[i])){
convertedStr +=str[i];
//ptr++;
}
else if(isalpha(str[i])){
char tempCh = toupper(str[i]);
if(tempCh>=\'A\' && tempCh<=\'Y\'){
//char encodingNum[1]; ?? bug from here?
char encodingNum[2] ="";
//itoa(encoding(tempCh),encodingNum,10); ?? itoa is not standart C/C++ code
stringstream number_str;
number_str<<encoding(tempCh);
convertedStr += number_str.str();
}
}
}
return atoi(convertedStr.c_str());
}
int encoding(char ch)
{
int mapping[25]={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};
if(ch>=\'A\' && ch<=\'Y\'){
int index = ch-\'A\';
return mapping[index];
}
}
bool pairCompare(pair<int,int> a,pair<int,int> b)
{
return (a.first<b.first);
}