#include <bits/stdc++.h>
template <class T>
inline T lowbit(T x) {
  return x & (-x);
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
inline bool scan(T &ret) {
  char c;
  int sgn;
  if (c = getchar(), c == EOF) return 0;
  while (c != '-' && (c < '0' || c > '9')) c = getchar();
  sgn = (c == '-') ? -1 : 1;
  ret = (c == '-') ? 0 : (c - '0');
  while (c = getchar(), c >= '0' && c <= '9') ret = ret * 10 + (c - '0');
  ret *= sgn;
  return 1;
}
const double pi = 3.14159265358979323846264338327950288L;
using namespace std;
int n, pre;
char a[100005];
bool vis[100005];
pair<int, int> q[100005];
vector<int> ans[100005], num;
long long Pow[100005], fac[100005], rev[100005];
long long qpow(long long a, long long b) {
  if (b == 0) return 1;
  long long ans = qpow(a, b >> 1);
  ans = ans * ans % 1000000007;
  if (b & 1) ans = ans * a % 1000000007;
  return ans;
}
long long C(int m, int n) {
  if (m < n) return 0;
  return fac[m] * rev[n] % 1000000007 * rev[m - n] % 1000000007;
}
void solve() {
  fac[0] = 1;
  for (int i = 1; i < 100005; i++) fac[i] = fac[i - 1] * i % 1000000007;
  rev[100005 - 1] = qpow(fac[100005 - 1], 1000000007 - 2);
  for (int i = 100005 - 2; i >= 0; i--)
    rev[i] = rev[i + 1] * (i + 1) % 1000000007;
  for (int i = 0; i < 100005; i++) ans[i].clear();
  num.clear();
  Pow[0] = 1;
  for (int i = 1; i < 100005; i++) Pow[i] = Pow[i - 1] * 25 % 1000000007;
  for (int i = 1; i <= 100000; i++)
    if (vis[i]) {
      num.push_back(i);
      for (int j = 0; j < 100005; j++) {
        if (j < i) {
          ans[i].push_back(0);
          continue;
        }
        long long tmp = 1LL * ans[i][j - 1] * 26 % 1000000007 +
                        C(j - 1, i - 1) * Pow[j - i] % 1000000007;
        ans[i].push_back(tmp % 1000000007);
      }
    }
  for (int i = 0; i < n; i++) {
    if (q[i].first == 1) {
      pre = q[i].second;
    } else {
      int k = *(lower_bound(num.begin(), num.end(), pre));
      printf("%d\n", ans[k][q[i].second]);
    }
  }
}
int main() {
  memset(vis, 0, sizeof(vis));
  cin >> n >> a;
  vis[pre = strlen(a)] = 1;
  for (int i = 0; i < n; i++) {
    cin >> q[i].first;
    if (q[i].first == 1) {
      cin >> a;
      int len = strlen(a);
      q[i].second = len;
      vis[len] = 1;
    } else {
      cin >> q[i].second;
    }
  }
  solve();
  return 0;
}
