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