#include <bits/stdc++.h>
const long long int mod = 998244353;
const long long int INF = 1e18 * 4;
const double PI = 3.14159265358979323846;
using namespace std;
inline long long int mul(long long int a, long long int b) {
  return (a * 1ll * b) % mod;
}
inline long long int sub(long long int a, long long int b) {
  long long int c = a - b;
  if (c < 0) c += mod;
  return c;
}
inline long long int add(long long int a, long long int b) {
  long long int c = a + b;
  if (c >= mod) c -= mod;
  return c;
}
long long int gcd(long long int a, long long int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long int powe(long long int x, long long int y) {
  if (y == 0) return 1;
  if (y == 1) return x;
  long long int t = powe(x, y / 2);
  t = (t * t) % mod;
  if (y % 2 == 1) t = (t * x) % mod;
  return t;
}
long long int dp[3005][3005];
void printmat(int n) {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      cout << "i - " << i << "\tj - " << j << "\tdp - " << dp[i][j] << endl;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int tc = 1;
  while (tc--) {
    memset(dp, 0, sizeof(dp));
    string s, t;
    cin >> s >> t;
    int n = s.size();
    int m = t.size();
    for (int i = 0; i < n; i++) {
      if (i < m and t[i] == s[0])
        dp[0][i] = 2;
      else if (i >= m)
        dp[0][i] = 2;
    }
    for (int i = 1; i < n; i++) {
      for (int j = 1; (i + j - 1) < n; j++) {
        if ((j - 1) >= m)
          dp[i][j - 1] = add(dp[i][j - 1], dp[i - 1][j]);
        else if (s[i] == t[j - 1])
          dp[i][j - 1] = add(dp[i][j - 1], dp[i - 1][j]);
      }
      for (int j = 0; (i + j) < n; j++) {
        if ((i + j) >= m)
          dp[i][j] = add(dp[i][j], dp[i - 1][j]);
        else if (s[i] == t[(i + j)])
          dp[i][j] = add(dp[i][j], dp[i - 1][j]);
      }
    }
    long long int ans = 0;
    for (int i = m - 1; i < n; i++) ans = add(ans, dp[i][0]);
    cout << ans << endl;
  }
}
