func_code_string: #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;   }   