#include<stdio.h>
#include<string.h>

void getChar(char*, int*);   //??????, ?????°

char key1[] = {'.', ',', '!', '?', ' '};
char key2[] = {'a', 'b', 'c'};
char key3[] = {'d', 'e', 'f'};
char key4[] = {'g', 'h', 'i'};
char key5[] = {'j', 'k', 'l'};
char key6[] = {'m', 'n', 'o'};
char key7[] = {'p', 'q', 'r', 's'};
char key8[] = {'t', 'u', 'v'};
char key9[] = {'w', 'x', 'y', 'z'};

int main(void) {
    int n, i, j, count;
    char str[1024], num, currentNum;
    
    scanf("%d", &n);
    
    for(i=0; i<n; i++){
        scanf("%s", str);
        count = 0;
        for(j=0; j<strlen(str); j++) {
            num = str[j];
            if(str[j] == '0' ) {
                if(currentNum != '0') {
                    getChar(&currentNum, &count);
                    count = 0;
                    currentNum = '0';
                }
            } else {
                currentNum = str[j];
                count++;
            }
        }
        printf("\n");
    }
return 0;
}

void getChar(char *num, int *n) {
   // printf("%c %d\n", *num, *n);
    *n-=1;
    char out = 'a';
    switch (*num) {
        case '1':
            out = key1[*n%sizeof(key1)];
            break;
        case '2':
            out = key2[*n%sizeof(key2)];
            break;
        case '3':
            out = key3[*n%sizeof(key3)];
            break;
        case '4':
            out = key4[*n%sizeof(key4)];
            break;
        case '5':
            out = key5[*n%sizeof(key5)];
            break;
        case '6':
            out = key6[*n%sizeof(key6)];
            break;
        case '7':
            out = key7[*n%sizeof(key7)];
            break;
        case '8':
            out = key8[*n%sizeof(key8)];
            break;
        case '9':
            out = key9[*n%sizeof(key9)];
            break;
        default:
            break;
    }
    
    printf("%c", out);
}