#include <bits/stdc++.h>
using namespace std;
const int inf = 1000000000;
const int md = 1e9 + 7;
const int maxn = 1e5 + 10;
int n, m;
char s[maxn];
long long f[maxn], vf[maxn], p25[maxn], dp[maxn];
vector<tuple<int, int, int> > q;
inline long long C(int n, int m) { return f[n] * vf[m] % md * vf[n - m] % md; }
inline long long pw(long long a, long long n) {
  long long y = 1;
  while (n > 0) {
    if (n & 1) y = y * a % md;
    a = a * a % md;
    n /= 2;
  }
  return y;
}
void calc(int l) {
  for (int i = 0; i < l; i++) dp[i] = 0;
  for (int i = l; i < maxn; i++) {
    dp[i] = dp[i - 1] * 26 + C(i - 1, l - 1) * p25[i - l];
    dp[i] %= md;
  }
}
int main() {
  scanf("%d", &m);
  int t;
  f[0] = 1;
  for (int i = 1; i < maxn; i++) f[i] = f[i - 1] * i % md;
  vf[maxn - 1] = pw(f[maxn - 1], md - 2);
  for (int i = maxn - 2; i >= 0; i--) vf[i] = vf[i + 1] * (i + 1) % md;
  p25[0] = 1;
  for (int i = 1; i < maxn; i++) p25[i] = p25[i - 1] * 25 % md;
  scanf("%s", s);
  int l = strlen(s);
  for (int i = 0; i < m; i++) {
    scanf("%d", &t);
    if (t == 1) {
      scanf("%s", s);
      l = strlen(s);
    } else {
      scanf("%d", &n);
      q.emplace_back(l, n, i);
    }
  }
  sort(q.begin(), q.end());
  vector<tuple<int, long long> > ans;
  l = inf;
  for (auto qi : q) {
    int nowl, n, z;
    tie(nowl, n, z) = qi;
    if (nowl != l) {
      l = nowl;
      calc(l);
    }
    ans.emplace_back(z, dp[n]);
  }
  sort(ans.begin(), ans.end());
  for (auto ansi : ans) printf("%I64d\n", get<1>(ansi));
}
