#include <stdio.h>

char func(int number,int count){
	switch(number){
	case 1:
		switch(count%5){
		case 0:return '\'';
		case 1:return ',';
		case 2:return '.';
		case 3:return '!';
		case 4:return '?';
		}
		break;
	case 2:
		switch(count%6){
		case 0:return 'a';
		case 1:return 'b';
		case 2:return 'c';
		case 3:return 'A';
		case 4:return 'B';
		case 5:return 'C';
		}
		break;
	case 3:
		switch(count%6){
		case 0:return 'd';
		case 1:return 'e';
		case 2:return 'f';
		case 3:return 'D';
		case 4:return 'E';
		case 5:return 'F';
		}
		break;
	case 4:
		switch(count%6){
		case 0:return 'g';
		case 1:return 'h';
		case 2:return 'i';
		case 3:return 'G';
		case 4:return 'H';
		case 5:return 'I';
		}
		break;
	case 5:
		switch(count%6){
		case 0:return 'j';
		case 1:return 'k';
		case 2:return 'l';
		case 3:return 'J';
		case 4:return 'K';
		case 5:return 'L';
		}
		break;
	case 6:
		switch(count%6){
		case 0:return 'm';
		case 1:return 'n';
		case 2:return 'o';
		case 3:return 'M';
		case 4:return 'N';
		case 5:return 'O';
		}
		break;
	case 7:
		switch(count%8){
		case 0:return 'p';
		case 1:return 'q';
		case 2:return 'r';
		case 3:return 's';
		case 4:return 'P';
		case 5:return 'Q';
		case 6:return 'R';
		case 7:return 'S';
		}
		break;
	case 8:
		switch(count%6){
		case 0:return 't';
		case 1:return 'u';
		case 2:return 'v';
		case 3:return 'T';
		case 4:return 'U';
		case 5:return 'V';
		}
		break;
	case 9:
		switch(count%8){
		case 0:return 'w';
		case 1:return 'x';
		case 2:return 'y';
		case 3:return 'z';
		case 4:return 'W';
		case 5:return 'X';
		case 6:return 'Y';
		case 7:return 'Z';
		}
		break;

	}
}

int main(){
	char buf[10001],pre,div;

	while(scanf("%s",buf)!=EOF){
		div = 0;
		for(int i=0; buf[i] != '\0'; i++){
			if(i == 0){
				pre = buf[i];
			}else{
				if(buf[i] == pre){
					if(pre == '0'){
						printf(" ");
					}else{
						div++;
						if(buf[i+1] == '\0'){
							printf("%c",func(pre-'0',div));
						}
					}
				}else if(buf[i] != pre && buf[i] == '0'){
					printf("%c",func(pre-'0',div));
					div = 0;
					pre = buf[i];
				}else if(buf[i] != pre && pre == '0'){
					pre = buf[i];
					div = 0;

					if(buf[i+1] == '\0'){
						printf("%c",func(pre-'0',div));
					}
				}else{
					printf("%c",func(pre-'0',div));
					div = 0;
					pre = buf[i];

					if(buf[i+1] == '\0'){
						printf("%c",func(pre-'0',div));
					}
				}
			}
		}
		printf("\n");
	}
}