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

/*因為ansi標準不接受//註解形式*/
/*先建Table好方便，規則二的先暫定給它-1*/
char encodeTable[]={-1,'1','2','3',-1,'1','2',-1,-1,'2','2','4','5','5',
					-1,'1','2','6','2','3',-1,'1',-1,'2',-1,'2'};

/*編碼器*/
char* encode(const char *n)
{
	char mid[21]; /*中介*/
	char *re = malloc(5*sizeof(char)); /*最終結果*/
	re[0] = re[1] = re[2] = re[3] = '0';
	re[4] = '\0'; /*先預填'0'與'\0'，完成規則5,6*/
	int i = 0, j = 1;
	/*第一個while完成規則2,4*/
	while(n[i] != '\0')
	{
		mid[i] = encodeTable[n[i]-'A'];
		i++;
	}
	mid[i] = '\0';
	i = 1;
	re[0] = n[0]; /*完成規則1*/
	/*第二個while完成規則3*/
	while(mid[i] != '\0')
	{
		 /*
			第一個先填入因為規則3的補充 including the first letter
			(規則1等等會完成)
			之後有-1的都不填入
			還要注意當前編碼是否與前一個相同
			如果4個編碼已經填完後面就不處理了
		 */
		if(mid[i] != -1 && mid[i-1] != mid[i])
		{
			re[j] = mid[i];
			j++;
			if(j == 4)
				break;
		}
		i++;
	}
	return re;
}

int main()
{
	char name[21];
	printf("%9s", "");
	printf("%-25s%s","NAME", "SOUNDEX CODE\n");
	while(scanf("%s", name) != EOF)
	{
		printf("%9s", "");
		printf("%-25s", name);
		char *tmp = encode(name);
		printf("%s\n", tmp);
		free(tmp);
	}
	printf("%19s", "");
	printf("%s\n","END OF OUTPUT");
	
	return EXIT_SUCCESS;
}