#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<stdexcept>
#include<cmath>
#include<memory>
#include<algorithm>
#include<cstring>
#include<ctime>
#include<deque>
#include<sstream>
#include<iomanip>
#include<sstream>
#include<vector>
#include<queue>
#include<stack>
#include<string>
#include<climits>
#include<map>
#include<set>
#include<list>
#include<cassert>
#include<deque>
#define REP(i,s,n) for(int i=s;i<n;i++)
#define rep(i,n) REP(i,0,n)
#define INF 1<<27
#define all(n) n.begin(),n.end()
#define insert(a,b,c,d) PP(P(a,b),P(c,d))
#define F first
#define S second
#define pb push_back
#define pf push_front
#define LIM 100000
using namespace std;
typedef pair<int,int> P;
typedef pair<P,P> PP;
typedef long long ll;
typedef unsigned long long ull;

char page[5][6] = {
  {'a','f','k','p','u','z'},
  {'b','g','l','q','v','.'},
  {'c','h','m','r','w','?'},
  {'d','i','n','s','x','!'},
  {'e','j','o','t','y',' '}  
};


class AOJ0127{
private:
  string code;
public:

  explicit AOJ0127(string code):code(code){}

  string decode(){
    if((int)code.size()%2 != 0)return "NA";
    rep(i,code.size()){
      if(i%2 == 0){
	if(!('1' <= code[i] && code[i] <='6' ))return "NA";
      }
      else{
	if(!('1' <= code[i] && code[i] <='5' ))return "NA";
      }
    }
    string res;
    for(int i=0;i<code.size();i+=2){
      res += page[(code[i+1]-'0')-1][(code[i]-'0')-1]; 
    }
    return res; 
  }
    
};

int main(){
  string s;
  while(cin >> s){
    AOJ0127 ans(s); 
    cout << ans.decode() << endl;
  }
return 0;
}