func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long maxn = 3e3 + 100;   const long long inf = 0x3f3f3f3f;   const long long iinf = 1 << 30;   const long long linf = 2e18;   const long long mod = 998244353;   const double eps = 1e-7;   template <class T = long long>   T chmin(T &a, T b) {     return a = min(a, b);   }   template <class T = long long>   T chmax(T &a, T b) {     return a = max(a, b);   }   template <class T = long long>   inline void red(T &x) {     x -= mod, x += x >> 31 & mod;   }   template <class T = long long>   T read() {     T f = 1, a = 0;     char ch = getchar();     while (!isdigit(ch)) {       if (ch ==  - ) f = -1;       ch = getchar();     }     while (isdigit(ch)) {       a = (a << 3) + (a << 1) + ch -  0 ;       ch = getchar();     }     return a * f;   }   long long n, m, ans;   char s[maxn], t[maxn];   long long f[maxn][maxn];   signed main() {     scanf( %s %s , s + 1, t + 1);     long long n = strlen(s + 1), m = strlen(t + 1);     for (long long i = (1); i <= (n); ++i) f[i][i] = 2 * (i > m || s[1] == t[i]);     for (long long i = (2); i <= (n); ++i)       for (long long l = (1); l <= (n - i + 1); ++l) {         long long r = l + i - 1;         if (l > m || s[i] == t[l]) red(f[l][r] += f[l + 1][r]);         if (r > m || s[i] == t[r]) red(f[l][r] += f[l][r - 1]);       }     for (long long i = (m); i <= (n); ++i) red(ans += f[1][i]);     printf( %lld n , ans);     return 0;   }   