#include <bits/stdc++.h>
using namespace std;
vector<int> g[100011];
map<int, int> M[100011];
long long pw[100011];
long long fact[100011];
long long ifact[100011];
long long bpow(long long x, long long n) {
  long long ans = 1;
  while (n > 0) {
    if (n & 1) ans *= x;
    x *= x;
    x %= 1000000007;
    ans %= 1000000007;
    n /= 2;
  }
  return ans;
}
long long ncr(long long n, long long p) {
  if (n < p) return 0;
  long long ret = ifact[p] * ifact[n - p];
  ret %= 1000000007;
  ret *= fact[n];
  ret %= 1000000007;
  return ret;
}
int main() {
  pw[0] = 1;
  fact[0] = 1;
  ifact[0] = 1;
  for (long long i = 1; i < 100011; i++) {
    pw[i] = 25LL * pw[i - 1];
    fact[i] = i * fact[i - 1];
    pw[i] %= 1000000007;
    fact[i] %= 1000000007;
    ifact[i] = bpow(fact[i], 1000000007 - 2);
  }
  long long m, t, n;
  string second;
  cin >> m;
  cin >> second;
  set<int> L;
  L.insert(second.size());
  vector<pair<long long, long long> > q;
  while (m--) {
    cin >> t;
    if (t == 1) {
      cin >> second;
      L.insert(second.size());
    } else {
      cin >> n;
      g[second.size()].push_back(n);
      q.push_back(make_pair(second.size(), n));
    }
  }
  vector<int> R(L.begin(), L.end());
  for (auto x : R) {
    sort(g[x].begin(), g[x].end());
    long long cur = 0;
    int i = 0;
    if (g[x].size())
      for (int n = x; n <= g[x].back(); n++) {
        cur *= 26;
        cur %= 1000000007;
        cur += (ncr(n - 1, x - 1) * pw[n - x]) % 1000000007;
        cur %= 1000000007;
        while (i < g[x].size() and g[x][i] < n) {
          i++;
        }
        while (i < g[x].size() and g[x][i] == n) {
          M[x][n] = cur;
          i++;
        }
      }
  }
  for (auto x : q) {
    cout << M[x.first][x.second] << "\n";
  }
}
