#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
T pow_mod(T a, U b, int mod) {
  T r = 1;
  for (; b > 0; b >>= 1) {
    if (b & 1) r = (long long)r * a % mod;
    a = (long long)a * a % mod;
  }
  return r;
}
namespace combinatorics {
const int mod = 1e9 + 7, N = 1e5 + 5;
int fac[N], ifac[N], p26[N], ip26[N], p25[N];
void init() {
  fac[0] = ifac[0] = p26[0] = ip26[0] = p25[0] = 1;
  for (int i = 1; i < N; ++i) {
    fac[i] = (long long)fac[i - 1] * i % mod;
    ifac[i] = pow_mod(fac[i], mod - 2, mod);
    p26[i] = (long long)p26[i - 1] * 26 % mod;
    ip26[i] = pow_mod(p26[i], mod - 2, mod);
    p25[i] = (long long)p25[i - 1] * 25 % mod;
  }
}
int comb(int n, int k) {
  return (long long)fac[n] * ifac[n - k] % mod * ifac[k] % mod;
}
}  // namespace combinatorics
using namespace combinatorics;
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  init();
  map<int, vector<pair<int, int>>> mp;
  int t;
  cin >> t;
  string s;
  cin >> s;
  int id = 0;
  while (t--) {
    int op, x;
    cin >> op;
    if (op == 1) {
      cin >> s;
    } else {
      cin >> x;
      mp[s.length()].push_back({x, id++});
    }
  }
  vector<int> ans(id);
  for (auto &v : mp) {
    auto &vec = v.second;
    sort(vec.begin(), vec.end());
    int y = v.first, x, i = y, a = 0;
    for (auto j : vec) {
      x = j.first;
      if (x < y) continue;
      for (; i <= x; ++i)
        a = (a + (long long)comb(i - 1, y - 1) * ip26[i] % mod * p25[i - y]) %
            mod;
      ans[j.second] = (long long)a * p26[x] % mod;
    }
  }
  for (auto i : ans) cout << i << "\n";
  return 0;
}
