#include <bits/stdc++.h>
using namespace std;
void precalc(){};
const int N = 100010;
const long long mod = (1e9) + 7 + 1e-8;
int nq;
vector<pair<int, int> > q[N];
long long extgcd(long long a, long long b, long long& x, long long& y) {
  long long d = a;
  if (b != 0) {
    d = extgcd(b, a % b, y, x);
    y -= (a / b) * x;
  } else {
    x = 1;
    y = 0;
  }
  return d;
}
long long mod_inverse(long long a, long long m) {
  long long x, y;
  extgcd(a, m, x, y);
  return (m + x % m) % m;
}
long long output[N];
long long qpow(int x, int y) {
  if (y == 0) return 0;
  if (y == 1) return x;
  long long half = qpow(x, y / 2);
  if (y & 1) return half * half % mod * x % mod;
  return half * half % mod;
}
inline long long mul(long long x, long long y) {
  long long z = x * y;
  if (z > mod) z %= mod;
  return z;
}
long long inv[N];
void calc(int slen) {
  int idx = 0;
  long long sum = 0;
  long long z = 1 * mod_inverse(qpow(26, slen), mod);
  long long qq = qpow(26, slen);
  long long delta = 25 * mod_inverse(26, mod) % mod;
  for (int i = slen; i <= N && idx < q[slen].size(); i++) {
    sum = ((sum + z) % mod + mod) % mod;
    long long tmp = sum * qq % mod;
    while (idx < q[slen].size() && q[slen][idx].first <= i) {
      if (q[slen][idx].first == i) output[q[slen][idx].second] = tmp;
      idx++;
    }
    z = mul(mul(mul(z, i), inv[i - slen + 1]), delta);
    qq = qq * 26;
    if (qq > mod) qq %= mod;
  }
}
void solve(int ncase) {
  int n, m;
  cin >> m;
  string s;
  for (int i = 0; i < N; i++) inv[i] = qpow(i, mod - 2);
  for (int i = 0; i < m; i++) {
    if (i == 0) {
      cin >> s;
    }
    int t;
    cin >> t;
    if (t == 1) {
      cin >> s;
    } else {
      cin >> n;
      q[s.size()].push_back(pair<int, int>(n, nq++));
    }
  }
  for (int i = 1; i < N; i++) {
    if (q[i].empty()) continue;
    sort(q[i].begin(), q[i].end());
    calc(i);
  }
  for (int i = 0; i < nq; i++) {
    cout << output[i] << endl;
  }
}
int main() {
  int T = 1;
  int ncase = 0;
  while (T--) {
    solve(++ncase);
  }
}
