#include <cstdio>
#include <cstring>
#define maxn 510
#define mod 3210121
using namespace std;
int n, m, i, j, k, l, sol;
char s1[maxn], s2[maxn];
int d[2][maxn][maxn];
int main() {
freopen("iv.in", "r", stdin);
freopen("iv.out", "w", stdout);
scanf(" %s ", s1 + 1);
scanf(" %s ", s2 + 1);
// printf("%c %c \n %c %c\n", s1[1], s1[2], s2[1], s2[2]);
for (n = 1; s1[n] != 0; n++);
n--;
for (m = 1; s2[m] != 0; m++);
m--;
s1[0] = '+'; s2[0] = '-';
// printf("%d %d\n", n, m);
d[0][n + 1][0] = d[1][n + 1][0] = 1;
for (i = 0; i <= n; i++) {
for (k = 0; k <= m; k++) {
for (j = n + 1; j > i; j--) {
l = m + n + 2 - i - j - k;
// fprintf(stderr, "%d %d %d %d %c %c %d ", i, j, k, l, s1[j], s2[k], d[1][j + 1][k - 1]);
if (l >= 0 && l <= m + 1) {
if (s1[i] == s1[j]) {
d[1][j][k] = (d[1][j][k] + d[0][j + 1][k]) % mod;
// fprintf(stderr, "i j %d %d\n", i, j);
}
if (s1[i] == s2[l]) {
d[1][j][k] = (d[1][j][k] + d[0][j][k]) % mod;
// fprintf(stderr, "i l %d %d\n", i, l);
}
if (s2[k] == s1[j]) {
d[1][j][k] = (d[1][j][k] + d[1][j + 1][k - 1]) % mod;
// fprintf(stderr, "k j %d %d %c %c ", k, j, s2[k], s1[j]);
}
if (s2[k] == s2[l]) {
d[1][j][k] = (d[1][j][k] + d[1][j][k - 1]) % mod;
// fprintf(stderr, "k l %d %d\n", k, l);
}
}
// fprintf(stderr, " %d\n", d[1][j][k]);
}
sol = (sol + d[1][i + 1][k]) % mod;
}
memcpy(d[0], d[1], sizeof(d[1]));
memset(d[1], 0, sizeof(d[1]));
}
printf("%d\n", sol);
}