#include <bits/stdc++.h>
using namespace std;
int p[100001];
int ip[100001];
int p1[100001];
int fact[100001];
int ifact[100001];
bool vis[100001];
int ans[450][100001];
int dist[100001];
int length[100001];
long long mul_inv(long long a, long long b) {
  long long b0 = b, t, q;
  long long x0 = 0, x1 = 1;
  if (b == 1) return 1;
  while (a > 1) {
    q = a / b;
    t = b, b = a % b, a = t;
    t = x0, x0 = x1 - q * x0, x1 = t;
  }
  if (x1 < 0) x1 += b0;
  return x1;
}
inline long long nCr(int n, int r) {
  return ((((long long)fact[n] * (long long)ifact[r]) % 1000000007) *
          (long long)ifact[n - r]) %
         1000000007;
}
int main(int argc, char const *argv[]) {
  p[0] = 1;
  p1[0] = 1;
  fact[0] = 1;
  for (int i = 1; i <= 100000; i++) {
    p[i] = (p[i - 1] * 26LL) % 1000000007;
    p1[i] = (p1[i - 1] * 25LL) % 1000000007;
    fact[i] = ((long long)fact[i - 1] * i) % 1000000007;
  }
  ifact[100000] = mul_inv(fact[100000], 1000000007);
  ip[100000] = mul_inv(p[100000], 1000000007);
  for (int i = 100000 - 1; i >= 0; i--) {
    ifact[i] = ((long long)ifact[i + 1] * (i + 1)) % 1000000007;
    ip[i] = (ip[i + 1] * 26LL) % 1000000007;
  }
  int q;
  ios::sync_with_stdio(false);
  cin >> q;
  string s;
  cin >> s;
  int m = s.size();
  pair<int, int> query[q + 1];
  query[0] = pair<int, int>(1, m);
  int diff = 0;
  dist[m] = diff++;
  vis[m] = true;
  for (int i = 1; i <= q; i++) {
    int t;
    cin >> t;
    if (t == 1) {
      cin >> s;
      m = s.size();
      query[i] = pair<int, int>(1, m);
      if (!vis[m]) {
        dist[m] = diff++;
      }
      vis[m] = true;
    } else {
      int n;
      cin >> n;
      query[i] = pair<int, int>(2, n);
      ans[dist[m]][n] = -1;
      length[m] = max(length[m], n);
    }
  }
  memset(vis, 0, sizeof(vis));
  for (int i = 0; i <= q; i++) {
    int t = query[i].first;
    if (t == 1) {
      m = query[i].second;
      if (!vis[m] && length[m]) {
        ans[dist[m]][m] = 1;
        long long prev = ip[m];
        for (int n = m + 1; n <= length[m]; n++) {
          long long t = (nCr(n - 1, m - 1) * (long long)p1[n - m]) % 1000000007;
          t = (t * ip[n]) % 1000000007;
          long long cur = (prev + t) % 1000000007;
          if (ans[dist[m]][n] == -1) {
            ans[dist[m]][n] = (cur * p[n]) % 1000000007;
          }
          prev = cur;
        }
      }
      vis[m] = true;
    } else {
      int n = query[i].second;
      cout << max(0, ans[dist[m]][n]) << endl;
    }
  }
  return 0;
}
