#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx,avx2,fma")
using namespace std;
const long long sz = 3e3 + 10, mod = 998244353;
char s[sz], t[sz];
long long dp[sz][sz];
long long solve(long long l, long long r) {
  if (l > r) return 1;
  long long &ret = dp[l][r];
  if (ret != -1) return ret;
  long long rt = 0, idx = r - l + 1;
  if (s[idx] == t[r] || t[r] == '$') rt = (rt + solve(l, r - 1)) % mod;
  if (s[idx] == t[l] || t[l] == '$') rt = (rt + solve(l + 1, r)) % mod;
  return ret = rt;
}
int main() {
  scanf("%s", s + 1);
  scanf("%s", t + 1);
  long long n = strlen(s + 1), m = strlen(t + 1);
  long long m2 = m;
  while (m2 < n) t[++m2] = '$';
  memset(dp, -1, sizeof(dp));
  long long tot = 0;
  for (long long i = m; i <= n; i++) tot = (tot + solve(1, i)) % mod;
  cout << tot << endl;
  return 0;
}
