#define _CRT_SECURE_NO_WARNINGS
#include"bits/stdc++.h"
#ifdef _DEBUG
#define DBG(n) n
#else
#define DBG(n)
#endif
#define INF          1e9
#define INFLL        1e18
#define EPS          1e-9
#define REP(i,n)     for(ll i=0,i##_len=(n);i<i##_len;++i)
#define REP1(i,n)    for(ll i=1,i##_len=(n);i<=i##_len;++i)
#define REPR(i,n)    for(ll i=(n)-1;i>=0;--i)
#define REPR1(i,n)   for(ll i=(n);i>0;--i)
#define REPC(i,obj)  for(auto i:obj)
#define ALL(obj)     (obj).begin(),(obj).end()
#define SETP(n)      cout<<fixed<<setprecision(n)
#define VV(T,h,w)    move(vector<vector<T>>(h,vector<T>(w)))
#define VVI(T,h,w,i) move(vector<vector<T>>(h,vector<T>(w,i)))
using namespace std;
using ll = long long;
template<typename T = ll>inline T in() { T ret; cin >> ret; return ret; }

signed main()
{
	string inpt;
	while (cin >> inpt) {
		if (inpt.size() % 2 == 1) {
			cout << "NA" << endl;
		} else {
			string res;
			for (ll i = 0; i < inpt.length(); i += 2) {
				if (inpt[i] < '1' || inpt[i] > '6' || inpt[i + 1] < '1' || inpt[i + 1] > '5') {
					res = "NA";
					break;
				} else {
					int a = (int)(inpt[i] - '0');
					int b = (int)(inpt[i + 1] - '0');
					int idx = (a - 1) * 5 + (b - 1);
					res += idx < 26 ? 'a' + idx : ".?! "[idx - 26];
				}
			}
			cout << res << endl;
		}
	}
}
