#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
int f[(200000 + 10)], nf[(200000 + 10)];
int p1[(200000 + 10)], p2[(200000 + 10)];
int qpow(int x, int y) {
  int ret = 1;
  while (y) {
    if (y & 1) ret = (long long)ret * x % 1000000007;
    x = (long long)x * x % 1000000007;
    y >>= 1;
  }
  return ret;
}
void init() {
  f[0] = 1, nf[0] = 1;
  for (int i = 1; i < (200000 + 10); ++i)
    f[i] = (long long)f[i - 1] * i % 1000000007;
  nf[(200000 + 10) - 1] = qpow(f[(200000 + 10) - 1], 1000000007 - 2);
  for (int i = (200000 + 10) - 2; i > 0; --i)
    nf[i] = (long long)nf[i + 1] * (i + 1) % 1000000007;
  p1[0] = p2[0] = 1;
  for (int i = 1; i < (200000 + 10); ++i)
    p1[i] = (long long)p1[i - 1] * 25 % 1000000007,
    p2[i] = (long long)p2[i - 1] * 26 % 1000000007;
}
int C(int n, int m) {
  if (n < m) return 0;
  return (long long)f[n] * nf[n - m] % 1000000007 * nf[m] % 1000000007;
}
int len;
int get(int i) {
  return (long long)C(i - 1, len - 1) * p1[i - len] % 1000000007;
}
char s[(200000 + 10)];
struct node {
  int op, val, l, id;
  int ret;
  bool operator<(const node &ot) const {
    return l < ot.l || (l == ot.l && val < ot.val);
  }
} a[(200000 + 10)];
int last;
long long ans;
void cal(int &n) {
  ans =
      (26 * ans % 1000000007 + (long long)get(n + 1) % 1000000007) % 1000000007;
  ++n;
}
bool cmp(node a, node b) { return a.id < b.id; }
void RE() {
  vector<int> vt;
  vt[0] = -1;
}
int main() {
  int m;
  init();
  scanf("%d", &m);
  scanf("%s", s);
  len = strlen(s);
  for (int i = 0; i < m; ++i) {
    scanf("%d", &a[i].op);
    a[i].id = i;
    if (a[i].op == 1) {
      scanf("%s", s);
      len = strlen(s);
    } else {
      scanf("%d", &a[i].val);
    }
    a[i].l = len;
  }
  sort(a, a + m);
  ans = 0;
  for (int i = 0; i < m; ++i) {
    if (a[i].op == 0) continue;
    if (i == 0 || a[i].l != a[i - 1].l) ans = 0, last = 0, len = a[i].l;
    while (last < a[i].val) cal(last);
    a[i].ret = ans;
  }
  sort(a, a + m, cmp);
  for (int i = 0; i < m; ++i)
    if (a[i].op == 2) printf("%d\n", a[i].ret);
}
