#include <bits/stdc++.h>
using namespace std;
template <class T>
bool remin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
bool remax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
int nxt() {
  int first;
  scanf("%d", &first);
  return first;
}
long long gcd(long long a, long long b) {
  a = abs(a);
  b = abs(b);
  while (b) {
    a %= b;
    swap(a, b);
  }
  return a;
}
struct pt {
  long long first, second;
  pt() {}
  pt(long long first, long long second) : first(first), second(second) {}
  pt operator-(const pt &r) const {
    return pt(first - r.first, second - r.second);
  }
  pt operator+(const pt &r) const {
    return pt(first + r.first, second + r.second);
  }
  pt operator*(const long double &r) const { return pt(first * r, second * r); }
  long long sqlen() const { return abs(first * first + second * second); }
  long double len() const { return sqrtl(sqlen()); }
  bool operator<(const pt &r) const {
    if (first != r.first) return first < r.first;
    return second < r.second;
  }
  bool operator==(const pt &r) const {
    return first == r.first && second == r.second;
  }
};
long long cross(const pt &l, const pt &r) {
  return l.first * r.second - l.second * r.first;
}
long long dot(const pt &l, const pt &r) {
  return l.first * r.first + l.second * r.second;
}
long long pwmod(long long a, long long n, long long mod) {
  long long ret = 1;
  while (n) {
    if (n & 1) ret = ret * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return ret;
}
template <typename T>
inline T sqr(T first) {
  return first * first;
}
string s;
const long long mod = 1000 * 1000 * 1000 + 7;
const int N = 1000 * 100 + 10;
long long f[N];
long long fi[N];
long long bin(int n, int k) {
  if (n < 0) return 0;
  if (k < 0 || k > n) return 0;
  return f[n] * fi[k] % mod * fi[n - k] % mod;
}
struct Q {
  int t, n;
  long long ans;
  Q() {}
  Q(int t, int n) : t(t), n(n) {}
};
vector<Q> e;
long long ans[N];
inline void solve() {
  f[0] = 1;
  fi[0] = 1;
  for (int i = 1; i < N; ++i) {
    f[i] = f[i - 1] * i % mod;
    fi[i] = pwmod(f[i], mod - 2, mod);
  }
  int m;
  cin >> m;
  cin >> s;
  e.push_back(Q(1, (int)s.length()));
  for (int i = 0; i < (int)(m); i++) {
    Q q;
    cin >> q.t;
    if (q.t == 1) {
      cin >> s;
      q.n = (int)s.length();
    } else {
      cin >> q.n;
    }
    e.push_back(q);
  }
  vector<int> lens;
  for (int i = 0; i < (int)(e.size()); i++) {
    if (e[i].t == 1) {
      lens.push_back(e[i].n);
    }
  }
  sort((lens).begin(), (lens).end());
  lens.resize(unique((lens).begin(), (lens).end()) - lens.begin());
  for (int sl : lens) {
    for (int i = 0; i < (int)(sl); i++) ans[i] = 0;
    ans[sl] = 1;
    long long pw25 = 1;
    for (int i = sl; i + 1 < N; ++i) {
      ans[i + 1] = ans[i];
      ans[i + 1] *= 26;
      ans[i + 1] %= mod;
      pw25 *= 25;
      pw25 %= mod;
      ans[i + 1] += bin(i, sl - 1) * pw25 % mod;
      ans[i + 1] %= mod;
    }
    int pr_len = -1;
    for (int i = 0; i < (int)(e.size()); i++) {
      if (e[i].t == 2) {
        if (pr_len == sl) {
          e[i].ans = ans[e[i].n];
        }
      } else {
        pr_len = e[i].n;
      }
    }
  }
  for (int i = 0; i < (int)(e.size()); i++) {
    if (e[i].t == 2) {
      cout << e[i].ans << "\n";
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  solve();
  cerr << "Time " << clock() / (double)CLOCKS_PER_SEC << endl;
  return 0;
}
