#include <bits/stdc++.h>
//#define int long long
//#define INT_MAX INT64_MAX
//#define INT_MIN INT64_MIN
#define ll long long
#define PI 3.14159265358979323846
#define CLK clock_t clk = clock();//Start of main
#define OCLK cerr << "Time (in ms): " << (double)(clock() - clk) * 1000.0 / CLOCKS_PER_SEC << '\n';//End of main
#define MOD 998244353
/* DEFINE cout */
#define pln cout << "===============================\n"
#define on cout<<"\n"
#define os cout<<" "
#define o2(a,b) cout<<a<<" "<<b
#define o(a) cout << a
#define bitcount __builtin_popcountll
/* DEFINE cout */
#define endl "\n"
#define fastio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);//fastio
using namespace std;
string x, y;
int n, m;
int dp[1001][1001][3][2][2];
int fun(int i, int j, int last, bool a, bool b){
    if(i == n && j == m){
        if(a&&b){
            return 1;
        }
        return 0;
    }
    if(dp[i][j][last+1][a][b] != -1){
        return dp[i][j][last+1][a][b];
    }
    ll tr = 0;
    if(a&&b){
        tr++;
    }
    int prev = -1;
    if(last == 0 && i-1>=0){
        prev = x[i-1] - 'a';
    }else if(last == 1 && j-1>=0){
        prev = y[j-1] - 'a';
    }
    if(n > i && x[i] - 'a' != prev){
        tr += fun(i+1, j, 0, true, b);
    }
    if(m > j && y[j] - 'a' != prev){
        tr += fun(i, j+1, 1, a, true);
        
    }
    dp[i][j][last+1][a][b] = tr%MOD;
    return tr%MOD;
    
}
void solve(){
    memset(dp, -1, sizeof(dp));
    cin >> x >> y;
    n = x.length();
    m = y.length();
    ll ans = 0;
    for(int i=0; n>i; i++){
        for(int j=0; m>j; j++){
            ans += fun(i, j, -1, false, false);
            ans %= MOD;
        }
    }
    cout << ans << endl;
    
    
}
signed main(){
    fastio;
    int t = 1;
//    cin >> t;
    while(t--){
        solve();
    }
}





