#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
const int maxn = 1e5 + 5, N = 1e6 + 20, SQ = 450, base = 800287, mod = 1e9 + 7,
          INF = 1e9 + 5, lg = 20;
const long double eps = 1e-4;
string s;
vector<int> vec[maxn];
int m, fac[maxn], inv[maxn], p25[maxn];
int power(int a, int b) {
  int res = 1;
  while (b) {
    if (b & 1) {
      res = (1ll * res * a) % mod;
    }
    b /= 2;
    a = (1ll * a * a) % mod;
  }
  return res;
}
inline int C(int a, int b) {
  return (((1ll * fac[a] * inv[b]) % mod) * 1ll * inv[a - b]) % mod;
}
void build(int x) {
  if ((int)vec[x].size()) {
    return;
  }
  for (int i = 0; i < x; ++i) {
    vec[x].push_back(0);
  }
  for (int i = x; i < maxn; ++i) {
    int val = (26ll * vec[x][i - 1] % mod +
               1ll * C(i - 1, x - 1) * p25[i - x] % mod) %
              mod;
    vec[x].push_back(val);
  }
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  p25[0] = fac[0] = inv[0] = 1;
  for (int i = 1; i < maxn; ++i) {
    fac[i] = (1ll * fac[i - 1] * i) % mod;
    p25[i] = (1ll * p25[i - 1] * 25) % mod;
    inv[i] = power(fac[i], mod - 2);
  }
  cin >> m >> s;
  build((int)s.size());
  while (m--) {
    int type, x;
    cin >> type;
    if (type == 1) {
      cin >> s;
      build((int)s.size());
    } else {
      cin >> x;
      cout << vec[(int)s.size()][x] << '\n';
    }
  }
}
