#include <stdio.h>
#include <string.h>
#define SMAX 1025
int main(void)
{
int c,i,n,p;
char s[SMAX];
// 文章の数
scanf("%d", &n);
for(i=0; i<n; i++){
scanf("%s", s);
p=0; //何文字目を読んでいるか表す変数
while(s[p]){ // 文字列の一番最後で終了
switch(s[p]){
case '1':
c=0;
while(s[p]!='0'){
c++; p++;
}
switch(c%=5){
case 1: putchar('.'); break;
case 2: putchar(','); break;
case 3: putchar('!'); break;
case 4: putchar('?'); break;
case 0: putchar(' '); break;
}
break;
case '2':
c=0;
while(s[p]!='0'){
c++; p++;
}
switch(c%=3){
case 1: putchar('a'); break;
case 2: putchar('b'); break;
case 0: putchar('c'); break;
}
break;
case '3':
c=0;
while(s[p]!='0'){
c++; p++;
}
switch(c%=3){
case 1: putchar('d'); break;
case 2: putchar('e'); break;
case 0: putchar('f'); break;
}
break;
case '4':
c=0;
while(s[p]!='0'){
c++; p++;
}
switch(c%=3){
case 1: putchar('g'); break;
case 2: putchar('h'); break;
case 0: putchar('i'); break;
}
break;
case '5':
c=0;
while(s[p]!='0'){
c++; p++;
}
switch(c%=3){
case 1: putchar('j'); break;
case 2: putchar('k'); break;
case 0: putchar('l'); break;
}
break;
case '6':
c=0;
while(s[p]!='0'){
c++; p++;
}
switch(c%=3){
case 1: putchar('m'); break;
case 2: putchar('n'); break;
case 0: putchar('o'); break;
}
break;
case '7':
c=0;
while(s[p]!='0'){
c++; p++;
}
switch(c%=4){
case 1: putchar('p'); break;
case 2: putchar('q'); break;
case 3: putchar('r'); break;
case 0: putchar('s'); break;
}
break;
case '8':
c=0;
while(s[p]!='0'){
c++; p++;
}
switch(c%=3){
case 1: putchar('t'); break;
case 2: putchar('u'); break;
case 0: putchar('v'); break;
}
break;
case '9':
c=0;
while(s[p]!='0'){
c++; p++;
}
switch(c%=4){
case 1: putchar('w'); break;
case 2: putchar('x'); break;
case 3: putchar('y'); break;
case 0: putchar('z'); break;
}
break;
}
p++;
}
printf("\n");
}
return(0);
}