using System;
using System.Collections.Generic;

namespace AOJ.Volume1
{
    public class PocketPagerInput
    {
        public static void Main()
        {
            var dic = new Dictionary<string, string>
            {
                {"11", "a"}, {"12", "b"}, {"13", "c"}, {"14", "d"}, {"15", "e"},
                {"21", "f"}, {"22", "g"}, {"23", "h"}, {"24", "i"}, {"25", "j"},
                {"31", "k"}, {"32", "l"}, {"33", "m"}, {"34", "n"}, {"35", "o"},
                {"41", "p"}, {"42", "q"}, {"43", "r"}, {"44", "s"}, {"45", "t"},
                {"51", "u"}, {"52", "v"}, {"53", "w"}, {"54", "x"}, {"55", "y"},
                {"61", "z"}, {"62", "."}, {"63", "?"}, {"64", "!"}, {"65", " "}
            };
            while (true)
            {
                string input = Console.ReadLine();
                if (string.IsNullOrEmpty(input)) { break; }

                string answer = "";

                // 文字数が偶数でない場合は変換できない
                if (input.Length % 2 != 0)
                {
                    Console.WriteLine("NA");
                    continue;
                }

                // 使用している文字が正しいか
                var check = answer.ToCharArray();
                int cnt = 1;
                bool enable = true;
                foreach (var c in check)
                {
                    // 奇数番目の文字は"1"?"6"
                    // 偶数番目の文字は"1"?"5"
                    char to_char = cnt % 2 == 0 ? '5' : '6';
                    if (c < '1' || c > to_char)
                    {
                        enable = false;
                        break;
                    }
                    cnt++;
                }
                if (!enable)
                {
                    Console.WriteLine("NA");
                    continue;
                }

                for (int i = 0; i < input.Length; i = i + 2)
                {
                    answer += dic[input.Substring(i, 2)];
                }

                Console.WriteLine(answer);
            }
        }
    }
}