#include <bits/stdc++.h>
using namespace std;
using vint = vector<long long>;
using pint = pair<long long, long long>;
using vpint = vector<pint>;
template <typename A, typename B>
inline void chmin(A& a, B b) {
  if (a > b) a = b;
}
template <typename A, typename B>
inline void chmax(A& a, B b) {
  if (a < b) a = b;
}
template <class A, class B>
ostream& operator<<(ostream& ost, const pair<A, B>& p) {
  ost << "{" << p.first << "," << p.second << "}";
  return ost;
}
template <class T>
ostream& operator<<(ostream& ost, const vector<T>& v) {
  ost << "{";
  for (long long i = 0; i < v.size(); i++) {
    if (i) ost << ",";
    ost << v[i];
  }
  ost << "}";
  return ost;
}
inline long long topbit(unsigned long long x) {
  return x ? 63 - __builtin_clzll(x) : -1;
}
inline long long popcount(unsigned long long x) {
  return __builtin_popcountll(x);
}
inline long long parity(unsigned long long x) { return __builtin_parity(x); }
template <uint32_t mod>
struct ModInt {
  uint32_t a;
  ModInt& s(uint32_t vv) {
    a = vv < mod ? vv : vv - mod;
    return *this;
  }
  ModInt(int64_t x = 0) { s(x % mod + mod); }
  ModInt& operator+=(const ModInt& x) { return s(a + x.a); }
  ModInt& operator-=(const ModInt& x) { return s(a + mod - x.a); }
  ModInt& operator*=(const ModInt& x) {
    a = uint64_t(a) * x.a % mod;
    return *this;
  }
  ModInt& operator/=(const ModInt& x) {
    *this *= x.inv();
    return *this;
  }
  ModInt operator+(const ModInt& x) const { return ModInt(*this) += x; }
  ModInt operator-(const ModInt& x) const { return ModInt(*this) -= x; }
  ModInt operator*(const ModInt& x) const { return ModInt(*this) *= x; }
  ModInt operator/(const ModInt& x) const { return ModInt(*this) /= x; }
  bool operator==(const ModInt& x) const { return a == x.a; }
  bool operator!=(const ModInt& x) const { return a != x.a; }
  bool operator<(const ModInt& x) const { return a < x.a; }
  ModInt operator-() const { return ModInt() - *this; }
  ModInt pow(int64_t n) const {
    ModInt res(1), x(*this);
    while (n) {
      if (n & 1) res *= x;
      x *= x;
      n >>= 1;
    }
    return res;
  }
  ModInt inv() const { return pow(mod - 2); }
};
template <uint32_t mod>
istream& operator>>(istream& in, ModInt<mod>& a) {
  return (in >> a.a);
}
template <uint32_t mod>
ostream& operator<<(ostream& out, const ModInt<mod>& a) {
  return (out << a.a);
}
using mint = ModInt<10007>;
using mat = vector<vector<mint>>;
string S;
long long N;
mint dp[210][210][210];
mat matmul(const mat& A, const mat& B) {
  mat C(A.size(), vector<mint>(A.size()));
  for (long long i = 0; i < A.size(); i++) {
    for (long long j = i; j < A.size(); j++) {
      for (long long k = i; k <= j; k++) {
        C[i][j] += A[i][k] * B[k][j];
      }
    }
  }
  return C;
}
mat matpow(mat A, long long k) {
  mat ret(A.size(), vector<mint>(A.size()));
  for (long long i = 0; i < (A.size()); i++) ret[i][i] = 1;
  while (k) {
    if (k & 1) ret = matmul(ret, A);
    A = matmul(A, A);
    k >>= 1;
  }
  return ret;
}
signed main() {
  cin >> S >> N;
  N += S.size();
  for (long long i = 0; i < (S.size()); i++) dp[0][i][i] = 1;
  for (long long i = 0; i < (S.size()); i++) dp[0][i][i + 1] = 1;
  for (long long i = S.size() - 1; i >= 0; i--) {
    for (long long j = i + 2; j <= S.size(); j++) {
      for (long long k = 0; k < S.size(); k++) {
        if (S[i] == S[j - 1]) {
          dp[k][i][j] += dp[k][i + 1][j - 1];
        } else {
          if (k == 0) continue;
          dp[k][i][j] += dp[k - 1][i + 1][j];
          dp[k][i][j] += dp[k - 1][i][j - 1];
        }
      }
    }
  }
  const long long X = S.size();
  const long long Y = (S.size() + 1) / 2;
  const long long Z = Y;
  vector<vector<mint>> A(X + Y + Z, vector<mint>(X + Y + Z));
  for (long long i = 0; i < (X); i++) {
    A[i][i] = 24;
    A[i][i + 1] = 1;
  }
  for (long long i = 0; i < (Y); i++) {
    A[X + i][X + i] = 25;
    if (i + 1 < Y) A[X + i][X + i + 1] = 1;
    A[X + i][X + Y + i] = 1;
  }
  for (long long i = 0; i < (Z); i++) {
    A[X + Y + i][X + Y + i] = 26;
  }
  mat C = matpow(A, (N + 1) / 2 - 1);
  A = matmul(C, A);
  mint ans = 0;
  for (long long k = 0; k < S.size(); k++) {
    long long l = (S.size() - k + 1) / 2;
    ans += dp[k][0][S.size()] * A[X - k][X + Y + l - 1];
    if ((S.size() - k) % 2 == 0 && N % 2) {
      ans -= dp[k][0][S.size()] * C[X - k][X + l - 1];
    }
  }
  cout << ans << endl;
  return 0;
}
