#include #include #include #include using namespace std; template std::istream &operator>>(std::istream &is, atcoder::static_modint &x) { long long t; return is >> t, x = t, is; } template std::ostream &operator<<(std::ostream &os, const atcoder::static_modint &x) { return os << x.val(); } using mint = atcoder::modint998244353; int main() { int X, Y; cin >> X >> Y; vector dp(X + 1, vector(Y + 1)); // dp[x][y]: 最小で AB x 個 BA y 個で作れる列の個数 dp[0][0] = 1; mint ret = 0; for (int i = 0; i < int(dp.size()); ++i) { for (int j = 0; j < int(dp[i].size()); ++j) { // AA 始まり / BB 始まり if (i and j) dp[i][j] += dp[i - 1][j - 1] * 2; // AB 始まり if (i) dp[i][j] += dp[i - 1][j]; // BA 始まり if (j) dp[i][j] += dp[i][j - 1]; if (j - i == Y - X) ret += dp[i][j]; } } cout << ret.val() << '\n'; }