#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
const long long MOD = 1e9 + 7;
const int N = 1e5 + 7;
char s[N];
int m, tot = 0;
struct query {
  int ls;
  int n;
  int id;
} q[N];
bool cmp(query a, query b) { return a.ls < b.ls; }
long long f[N];
long long ans[N];
long long fac[N], inv[N];
inline long long qpow(long long a, long long b) {
  long long c = 1;
  while (b) {
    if (b & 1) c = c * a % MOD;
    a = a * a % MOD;
    b >>= 1;
  }
  return c;
}
inline long long comb(long long n, long long m) {
  return fac[n] * inv[m] % MOD * inv[n - m] % MOD;
}
long long pow26[N], pow25[N], inv26[N];
int main() {
  fac[0] = 1;
  for (int i = int(1); i <= int(N - 1); ++i) fac[i] = fac[i - 1] * i % MOD;
  inv[0] = inv[1] = 1;
  for (int i = int(2); i <= int(N - 1); ++i)
    inv[i] = MOD - (MOD / i) * inv[MOD % i] % MOD;
  inv26[0] = 1;
  for (int i = int(1); i <= int(N - 1); ++i)
    inv26[i] = inv26[i - 1] * inv[26] % MOD;
  for (int i = int(1); i <= int(N - 1); ++i) inv[i] = inv[i] * inv[i - 1] % MOD;
  pow26[0] = pow25[0] = 1;
  for (int i = int(1); i <= int(N - 1); ++i)
    pow25[i] = pow25[i - 1] * 25 % MOD, pow26[i] = pow26[i - 1] * 26 % MOD;
  scanf("%d", &m);
  scanf("%s", s);
  int n = strlen(s);
  while (m--) {
    int c;
    scanf("%d", &c);
    if (c == 1) {
      scanf("%s", s);
      n = strlen(s);
    } else {
      int t;
      scanf("%d", &t);
      tot++;
      q[tot] = (query){n, t, tot};
    }
  }
  sort(q + 1, q + tot + 1, cmp);
  for (int i = int(1); i <= int(tot); ++i) {
    if (q[i].ls != q[i - 1].ls) {
      f[q[i].ls - 1] = 0;
      for (int j = int(q[i].ls); j <= int(N - 1); ++j) {
        f[j] = f[j - 1];
        f[j] += comb(j - 1, q[i].ls - 1) * pow25[j - q[i].ls] % MOD * inv26[j] %
                MOD;
        f[j] %= MOD;
      }
    }
    if (q[i].n >= q[i].ls)
      ans[q[i].id] = f[q[i].n] * pow26[q[i].n] % MOD;
    else
      ans[q[i].id] = 0;
  }
  for (int i = int(1); i <= int(tot); ++i) printf("%I64d\n", ans[i]);
}
