#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int random(int l, int r) { return uniform_int_distribution<int>(l, r)(rng); }
const int N = 3001;
const long long mod = 998244353;
string s, t;
long long memo[N][N];
int k;
long long dp(int l, int r) {
  if (l > r) return 1;
  long long &ans = memo[l][r];
  if (ans != -1) return ans;
  ans = 0;
  if (s[r - l] == t[l] || t[l] == '?') ans += dp(l + 1, r);
  if (s[r - l] == t[r] || t[r] == '?') ans += dp(l, r - 1);
  ans %= mod;
  return ans;
}
void run() {
  memset(memo, -1, sizeof memo);
  cin >> s >> t;
  k = t.size();
  while (t.size() < s.size()) t += '?';
  long long ans = 0;
  for (int i = k - 1; i < t.size(); i++) ans += dp(0, i);
  ans %= mod;
  cout << ans << endl;
}
int main() {
  int t = 1;
  for (int i = 0; i < t; i++) {
    run();
  }
}
