#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline bool uax(T &x, T y) {
  return (y > x) ? x = y, true : false;
}
template <typename T>
inline bool uin(T &x, T y) {
  return (y < x) ? x = y, true : false;
}
string to_string(char c) { return "'" + string(1, c) + "'"; }
string to_string(string s) { return '"' + s + '"'; }
string to_string(const char *s) { return to_string((string)s); }
template <typename A>
string to_string(A);
template <typename A, typename B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ": " + to_string(p.second) + ")";
}
template <typename A>
string to_string(A v) {
  bool f = false;
  string r = "{";
  for (auto x : v) {
    if (f) r += ", ";
    r += to_string(x);
    f = true;
  }
  return r += "}";
}
template <typename A>
string to_string(vector<vector<A>> v) {
  string r;
  for (auto x : v) r += "\n" + to_string(x);
  return r;
}
int Nerr;
template <typename A>
string to_string(A *p) {
  return to_string(vector<A>(p, p + Nerr));
}
void err(istream_iterator<string>) { cerr << endl; }
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " =: " << to_string(a) << "; ";
  err(++it, args...);
}
template <typename T>
void kek(T ans) {
  cout << ans << endl;
  exit(0);
}
int const MOD = 1e9 + 7;
long long const INF = 1e18 + 42;
inline int add(int a, int b, int mod = MOD) {
  a += b;
  return a >= mod ? a - mod : a;
}
inline int sub(int a, int b, int mod = MOD) {
  a -= b;
  return a < 0 ? a + mod : a;
}
inline int mul(int a, int b, int mod = MOD) {
  return int((long long)a * b % mod);
}
inline int mpow(int base, long long ex, int mod = MOD) {
  int res = 1;
  for (; ex > 0; ex >>= 1) {
    if (ex & 1) res = mul(res, base, mod);
    base = mul(base, base, mod);
  }
  return res;
}
inline int inv(int a, int mod = MOD) { return mpow(a, mod - 2, mod); }
inline int mdiv(int a, int b, int mod = MOD) {
  return mul(a, mpow(b, mod - 2, mod));
}
inline void adds(int &a, int b, int mod = MOD) {
  a += b;
  if (a >= mod) a -= mod;
}
inline void subs(int &a, int b, int mod = MOD) {
  a -= b;
  if (a < 0) a += mod;
}
inline void muls(int &a, int b, int mod = MOD) {
  a = int((long long)a * b % mod);
}
inline void mdivs(int &a, int b, int mod = MOD) { a = mdiv(a, b, mod); }
vector<int> fac, ifac;
inline int ncr(int n, int r) {
  if (n < r || r < 0 || n < 0) return 0;
  return mul(fac[n], mul(ifac[n - r], ifac[r]));
}
void prepare_factorial(int nax = 1e6 + 10) {
  fac.resize(nax);
  ifac.resize(nax);
  fac[0] = 1;
  for (int i = 1; i < nax; ++i) fac[i] = mul(i, fac[i - 1]);
  ifac[nax - 1] = inv(fac[nax - 1]);
  for (int i = nax - 1; i > 0; --i) ifac[i - 1] = mul(i, ifac[i]);
}
int32_t main() {
  cin.tie(nullptr)->sync_with_stdio(false);
  const int nax = 1e5 + 42;
  prepare_factorial(nax);
  vector<int> pw(nax);
  pw[0] = 1;
  for (int i = 1; i < nax; ++i) pw[i] = mul(25, pw[i - 1]);
  int tt;
  cin >> tt;
  vector<vector<int>> ans(nax);
  string s;
  cin >> s;
  int n = int((s).size());
  ans[n].assign(n + 1, 0);
  ans[n][n] = 1;
  while (tt--) {
    int t;
    cin >> t;
    if (t == 1) {
      cin >> s;
      n = int((s).size());
      if (int((ans[n]).size()) <= n) ans[n].assign(n + 1, 0);
      ans[n][n] = 1;
    } else {
      int m;
      cin >> m;
      if (m >= int((ans[n]).size())) {
        ans[n].reserve(m + 1);
        for (int i = int((ans[n]).size()); i <= m; ++i) {
          ans[n].push_back(mul(ans[n][i - 1], 26));
          adds(ans[n][i], mul(ncr(i - 1, n - 1), pw[i - n]));
        }
      }
      cout << ans[n][m] << '\n';
    }
  }
}
