//#define _GLIBCXX_DEBUG #include #define rep(i, n) for(int i=0; i; using vs = vector; using vi = vector; using vvi = vector; template using PQ = priority_queue; template using PQG = priority_queue, greater >; const int INF = 0xccccccc; const ll LINF = 922337203685477580LL; template inline bool chmax(T1 &a, T2 b) {return a < b && (a = b, true);} template inline bool chmin(T1 &a, T2 b) {return a > b && (a = b, true);} template istream &operator>>(istream &is, pair &p) { return is >> p.first >> p.second;} template ostream &operator<<(ostream &os, const pair &p) { return os << p.first << ' ' << p.second;} //head int cnt; string s, rev; bool dfs(int i, string &s, string &rev, bool used) { if(i == s.size()) return true; if(s[i] == rev[i]) { return dfs(i+1, s, rev, used); } else { cnt++; if(used) return false; char c = s[i], cd = rev[i]; int n = s.size(); string x = s.substr(0, i) + cd + s.substr(i); string y = rev.substr(0, n-i) + cd + rev.substr(n-i); if(dfs(i+1, x, y, true)) { s = x; rev = y; return true; } x = s.substr(0, n-i) + c + s.substr(n-i); y = rev.substr(0, i) + c + rev.substr(i); if(dfs(i+1, x, y, true)) { s = x; rev = y; return true; } return false; } } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> s; rev = s; reverse(all(s)); if(!dfs(0, s, rev, false)) { cout << "NA" << endl; } else { if(!cnt) { if(s.size()&1) { s = s.substr(0, s.size()/2) + s[s.size()/2] + s.substr(s.size()/2); } else { s = s.substr(0, s.size()/2) + 'u' + s.substr(s.size()/2); } } cout << s << endl; } }