#include <bits/stdc++.h>
using namespace std;
const int nmax = (int)(1e5) + 2;
const long long module = (long long)(1e9) + 7ll;
const int N = (int)(1e5) + 10;
int n, m, ans[N];
vector<int> b, c;
vector<pair<int, int> > query[N];
long long f[N], i_f[N], F[N], Pow25[N];
int Inv(int a, int m) {
  int xa = 1, xm = 0, r = 0, xr = 0;
  while (m != 0) {
    int q = a / m;
    xr = xa - q * xm;
    xa = xm;
    xm = xr;
    r = a % m;
    a = m;
    m = r;
  }
  if (xa < 0) xa += module;
  return xa;
}
void Init() {
  f[0] = 1;
  i_f[0] = Inv(f[0], module);
  for (int i = 1; i <= nmax; i++) {
    f[i] = (f[i - 1] * i) % module;
    i_f[i] = Inv(f[i], module) % module;
  }
  Pow25[0] = 1;
  for (int i = 1; i <= nmax; i++) {
    Pow25[i] = ((long long)Pow25[i - 1] * 25) % module;
  }
}
void Solve(int len) {
  F[len] = 1;
  for (int i = len + 1; i <= nmax; i++) {
    F[i] = F[i - 1] * 26;
    F[i] %= module;
    F[i] = (F[i] + (((Pow25[i - len] * f[i - 1]) % module) *
                    ((i_f[len - 1] * i_f[i - len]) % module)) %
                       module) %
           module;
  }
  for (int i = 0; i < query[len].size(); i++) {
    ans[query[len][i].second] = F[query[len][i].first];
  }
}
string S;
int x, len;
int main() {
  Init();
  cin >> n;
  cin >> S;
  len = S.size();
  for (int i = 1; i <= n; i++) {
    cin >> x;
    if (x == 1) {
      cin >> S;
      len = S.size();
    } else {
      cin >> x;
      query[len].push_back(make_pair(x, i));
      b.push_back(len);
    }
    ans[i] = -1;
  }
  sort(b.begin(), b.end());
  if (!b.empty()) {
    c.push_back(b[0]);
  }
  for (int i = 1; i < b.size(); i++)
    if (b[i] != b[i - 1]) c.push_back(b[i]);
  for (int i = (int)c.size() - 1; i >= 0; i--) Solve(c[i]);
  for (int i = 1; i <= n; i++)
    if (ans[i] != -1) printf("%d\n", ans[i]);
}
