///////////////////////////////////////////////////////
//1068摩斯密碼
//直接類比
#include<iostream>
#include<algorithm>
using namespace std;
char code[35][2][5]; //記錄29個摩斯密碼
char str[150]; //記錄輸入的原碼
char change[450]; //記錄摩斯碼
int numlen[105]; //記錄原碼每個字元的摩斯碼長度
int stringlen; //儲存原碼長度
int codelen; //儲存摩斯碼長度
void build()
{
strcpy(code[0][0],".-");
strcpy(code[1][0],"-...");
strcpy(code[2][0],"-.-.");
strcpy(code[3][0],"-..");
strcpy(code[4][0],".");
strcpy(code[5][0],"..-.");
strcpy(code[6][0],"--.");
strcpy(code[7][0],"....");
strcpy(code[8][0],"..");
strcpy(code[9][0],".---");
strcpy(code[10][0],"-.-");
strcpy(code[11][0],".-..");
strcpy(code[12][0],"--");
strcpy(code[13][0],"-.");
strcpy(code[14][0],"---");
strcpy(code[15][0],".--.");
strcpy(code[16][0],"--.-");
strcpy(code[17][0],".-.");
strcpy(code[18][0],"...");
strcpy(code[19][0],"-");
strcpy(code[20][0],"..-");
strcpy(code[21][0],"...-");
strcpy(code[22][0],".--");
strcpy(code[23][0],"-..-");
strcpy(code[24][0],"-.--");
strcpy(code[25][0],"--..");
strcpy(code[26][0],"..--"); //底線“_”
strcpy(code[27][0],"---."); //句號 “.”
strcpy(code[28][0],".-.-"); //逗號 “,”
strcpy(code[29][0],"----"); //問號 “?”
int i;
for(i=0;i<30;i++)
{
code[i][1][0]=strlen(code[i][0])+'0';
code[i][1][1]='\0';
}
}
//使原碼化為摩斯碼,且記錄原碼每個字元的摩斯碼長度
void Input()
{
cin>>str;
stringlen=strlen(str);
int i,j,k;
int pos=0;
k=0;
for(i=0;i<stringlen;i++)
{
if(str[i]=='_')
pos=26;
else if(str[i]=='.')
pos=27;
else if(str[i]==',')
pos=28;
else if(str[i]=='?')
pos=29;
else
pos=str[i]-'A';
numlen[i]=code[pos][1][0]-'0';
for(j=0;j<numlen[i];j++)
change[k++]=code[pos][0][j];
}
codelen=k;
}
//對摩斯碼進行解碼
void Output()
{
int i,j,k,m;
bool flags;
int pos,codestate;
//m記錄摩斯碼串的字元下標
m=0;
//對每一個編碼進行解碼
for(i=0;i<stringlen;i++)
{
//flags為1時找到了該對應的字元
flags=0;
pos=0;
codestate=m;
//對每個碼進行比較,看該摩斯碼是對應哪個字元
for(j=0;j<30;j++)
{
//每次比較前,要使字元下標回到當前需要比較的摩斯碼首位置
m=codestate;
if(numlen[i]==code[j][1][0]-'0')
{
flags=1;
for(k=0;k<code[j][1][0]-'0';k++)
{
if(change[m++]!=code[j][0][k])
{
flags=0;
break;
}
}
}
if(flags==1)
{
pos=j;
break;
}
}
if(pos==26)
cout<<"_";
else if(pos==27)
cout<<".";
else if(pos==28)
cout<<",";
else if(pos==29)
cout<<"?";
else
{
//這樣才可以輸出
char s='A'+pos;
cout<<s;
}
}
}
int main()
{
build();
int n;
int casenum=1;
cin>>n;
while(n--)
{
Input();
int i;
//倒轉numlen裡的長度序
for(i=0;i<stringlen/2;i++)
swap(numlen[i],numlen[stringlen-1-i]);
cout<<casenum<<": ";
casenum++;
Output();
cout<<endl;
}
return 0;
}