#include <stdio.h>
#include <stdlib.h>

int main(void){
	char no1[] = {'.', ',', '!', '?', ' '};
	char no2[] = {'a', 'b', 'c'};
	char no3[] = {'d', 'e', 'f'};
	char no4[] = {'g', 'h', 'i'};
	char no5[] = {'j', 'k', 'l'};
	char no6[] = {'m', 'n', 'o'};
	char no7[] = {'p', 'q', 'r', 's'};
	char no8[] = {'t', 'u', 'v'};
	char no9[] = {'w', 'x', 'y', 'z'};
	char in[1025];  // 入力文字
	int times=0;  // 何回押されたか
	int length;  // テストケースの数
	int i, n=0;
	int no, now, pressed=-1;
	char str[2], mess, string;
	char message[76];  // 最終的なメッセージ
	int m;

	// テストケースの数
	scanf("%d", &length);
	// メッセージ入力
	for(i=0; i<length; i++){
		scanf("%s", in);
		// in = [5,5,5,5,,0,8,0,5,0]
		// メッセージの解析
		n = 0;  // 解析元の何文字目か
		now = 0;  // 事後のメッセージの何文字目か
		str[0] = in[n];
		str[1] = '\0';
		sprintf(str, "%s", str);
		while(str[0] != '\0'){
			//printf("%s\n", str);
			//printf("%p\n", str);
			no = atoi(str);
			//printf("=>%d\n", no);
			if(no == 0){
				if(pressed == 1){
					times %= 6;
					mess = no1[times -1];
				}else if(pressed == 2){
					times %= 4;
					mess = no2[times -1];
				}else if(pressed == 3){
					times %= 4;
					mess = no3[times -1];
				}else if(pressed == 4){
					times %= 4;
					mess = no4[times -1];
				}else if(pressed == 5){
					times %= 4;
					mess = no5[times -1];
				}else if(pressed == 6){
					times %= 4;
					mess = no6[times -1];
				}else if(pressed == 7){
					times %= 5;
					mess = no7[times -1];
				}else if(pressed == 8){
					times %= 4;
					mess = no8[times -1];
				}else{
					times %= 5;
					mess = no9[times -1];
					times = 0;
					pressed = -1;
				}
				message[now] = mess;
				//printf("%c\n", mess);
				now++;
			}else{
				pressed = no;
			}
			times += 1;
			n++;
			str[0] = in[n];
			str[1] = '\0';
			sprintf(str, "%s", str);
		}
		//printf("=========================\n");
			//printf("%c\n", message[0]);
		//printf("=========================\n");
		message[now] = '\0';
		printf("%s\n", message);
	}

	return 0;
}