#include <bits/stdc++.h>
template <class T>
inline T qmin(T a, T b) {
  return a < b ? a : b;
}
template <class T>
inline T qmax(T a, T b) {
  return a > b ? a : b;
}
const double eps = 1e-9;
const double PI = acos(-1);
const int inf = 0x3f3f3f3f;
const int mod = 998244353;
const int maxn = (int)3e3 + 5;
const int maxm = (int)1e5 + 5;
const long long INF = 0x3f3f3f3f3f3f3f3f;
using namespace std;
int dp[maxn][maxn];
char s[maxn], t[maxn];
void add(int &x, int y) {
  x += y;
  if (x >= mod) x -= mod;
}
int main() {
  scanf("%s", s + 1);
  scanf("%s", t + 1);
  int n = strlen(s + 1), m = strlen(t + 1);
  for (__typeof(n) i = 1; i <= (n); i++) dp[i][i] = (i > m || s[1] == t[i]);
  for (__typeof(n) len = 2; len <= (n); len++) {
    for (__typeof(n - len + 1) l = 1; l <= (n - len + 1); l++) {
      int r = l + len - 1;
      if (l > m || t[l] == s[len]) add(dp[l][r], dp[l + 1][r]);
      if (r > m || t[r] == s[len]) add(dp[l][r], dp[l][r - 1]);
    }
  }
  int ans = 0;
  for (__typeof(n) i = m; i <= (n); i++) add(ans, dp[1][i]);
  add(ans, ans);
  printf("%d\n", ans);
  return 0;
}
