function Main(input) {
  input = input.trim().split("\n");
  var C = 1000000007;
  var C2 = 100000;
  var K =  parseInt(input[0],10);
  var S =  input[1];
  var SL = S.length;
  var WL = S.length + K;
  var BK = K; //左から数えてSが全て出現した後に文字列が挿入された回数 BK + i = WL
  var combination;
  var n,r; //nCrの形
  n = SL - 1;
  r = 0;
  combination = nCr_amari(n, r, K + 1, C, C2)
  var productR;
  var vec_26RuijoR = ruijoR(26, BK, C);
  var vec_25RuijoR = ruijoR(25, BK, C);
  var ans = 0;
  productR = vec_26RuijoR[BK] * vec_25RuijoR[0] ;
  ans += productR;
  ans = ans % (C);
      n++;
      r++;
      BK--;
  for (var i = 1; i <= K; i++){
      productR = kakeruR(vec_26RuijoR[BK], vec_25RuijoR[i], C, C2);
      ans += kakeruR(productR, combination[i], C, C2);
      ans %= C;
      n++;
      r++;
      BK--;
  }
console.log(ans);
}   

function ruijoR(num, x, divider){
  var ans = [1];
  var tmp = 1;
  for (var i = 0; i <= x; i++){
      tmp *= num;
      tmp %= divider;
      ans.push(tmp);
  }
  return ans;
}
function nCr_amari(n, k, MAX, MOD, C2) {
// 前処理
var v_ans = [ ];
var fac, finv, inv;
fac = [1,1];
finv = [1,1];
inv = [0,1];
for (var i = 2; i < (n + MAX); i++){
    fac.push(fac[i - 1] * i % MOD);
    inv.push(MOD - kakeruR(inv[MOD%i], (MOD / i | 0), MOD, C2) % MOD);
    finv.push(kakeruR(finv[i - 1],inv[i] ,MOD,C2));
}
  //二項係数計算
if (n < k) return 0;
if (n < 0 || k < 0) return 0;
for (var i = 0; i < MAX; i++){
  v_ans.push(kakeruR(kakeruR(fac[n + i] , finv[k + i],MOD,C2), finv[n - k],MOD,C2));
}
return v_ans;
}
function kakeruR(a, b, C, C2){
var tmpQ, tmpR, ans;
  tmpQ =  (b / C2 | 0);
  tmpR =  b - (tmpQ * C2);
  ans = (a * tmpQ % C) * C2 % C + (a * tmpR);
  ans %= C;
return ans;
}

Main(require("fs").readFileSync("/dev/stdin", "utf8"));