#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
#define LLINF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define vi vector<int>
#define SZ(x) (int)x.size()
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
const int mod = 998244353;
int qpow(int a, int b) {
    int ans = 1;
    while(b) {
        if(b & 1)
            ans = 1ll * ans * a % mod;
        a = 1ll * a * a % mod;
        b >>= 1;
    }
    return ans;
}
int dp[1005][1005][2][2][2];
//vector<string>st[1005][1005][2][2][2];

char x[1005];
char y[1005];

int main() {
    scanf("%s", x + 1);
    scanf("%s", y + 1);
    int n = strlen(x + 1), m = strlen(y + 1);

    for(int i = 0; i <= n; i++) {
        for(int j = 0; j <= m; j++) {
            dp[i][j][0][0][0] = 1;
            dp[i][j][1][0][0] = 1;

//            st[i][j][0][0][0].pb("");
//            st[i][j][1][0][0].pb("");
        }
    }
//    if(x[0] != y[0]) {
//        dp[0][0][0][1][0] = 1;
//        dp[0][0][1][0][1] = 1;
//
//        dp[0][0][0][1][1] = 1;
//        dp[0][0][1][1][1] = 1;
//
//        string a, b;
//        a += x[0];
//        b += y[0];
//        st[0][0][0][1][0].pb(a);
//        st[0][0][1][0][1].pb(b);
//
//        st[0][0][0][1][1].pb(b + x[0]);
//        st[0][0][1][1][1].pb(a + y[0]);
//    }
    for(int i = 0; i <= n; i++) {
        for(int j = 0; j <= m; j++) {
            for(int f = 0; f < 2; f++) {
                for(int k1 = 0; k1 < 2; k1++) {
                    for(int k2 = 0; k2 < 2; k2++) {
                        char pre = f == 0 ? x[i] : y[j];
                        if(k1 == 0 && k2 == 0)
                            pre = '0';

                        // x[i + 1]
                        if(i + 1 <= n && x[i + 1] != pre) {
                            dp[i + 1][j][0][1][k2] += dp[i][j][f][k1][k2];
                            dp[i + 1][j][0][1][k2] %= mod;

//                            for(auto s : st[i][j][f][k1][k2])
//                                st[i + 1][j][0][1][k2].pb(s + x[i + 1]);
                        }
                        // y[j + 1]
                        if(j + 1 <= m && y[j + 1] != pre) {
                            dp[i][j + 1][1][k1][1] += dp[i][j][f][k1][k2];
                            dp[i][j + 1][1][k1][1] %= mod;

//                            for(auto s : st[i][j][f][k1][k2])
//                                st[i][j + 1][1][k1][1].pb(s + y[j + 1]);
                        }

//                        printf("i: %d j: %d f: %d k1: %d k2: %d dp: %d\n", i, j, f, k1, k2, dp[i][j][f][k1][k2]);
//                        if(k1 == 1 && k2 == 1) {
//                        for(auto s : st[i][j][f][k1][k2])
//                            cout << s << '\n';
//                        }
                    }
                }
            }
        }
    }
    int ans = 0;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            for(int f = 0; f < 2; f++)
                ans = (ans + dp[i][j][f][1][1]) % mod;

    int inv2 = qpow(2, mod - 2);
    ans = 1ll * ans * inv2 % mod;
    printf("%d\n", ans);
}
