#include <iostream>
using namespace std;
int N, A, B;
int Fact[20000005], Inv[20000005];
const int MOD = 998244353;
int powerLog(int n, int p){
    int sol = 1;
    while(p){
        if(p & 1)
            sol = (1LL * sol * n) % MOD;
        p /= 2;
        n = (1LL * n * n) % MOD;
    }
    return sol;
}
void precalcFact(){
    Fact[0] = 1;
    Inv[0] = 1;
    for(int i = 1; i <= 20000000; i++)
        Fact[i] = (1LL * Fact[i - 1] * i) % MOD;
    Inv[20000000] = powerLog(Fact[20000000], MOD - 2);
    for(int i = 20000000 - 1; i >= 0; i--)
        Inv[i] = (1LL * Inv[i + 1] * (i + 1)) % MOD;
}

int Combinations(int n, int k){
    return (((1LL * Fact[n] * Inv[k]) % MOD) * Inv[n - k]) % MOD;
}
int CatalanTriangle(int n, int k){
    if(n < k)
        return 0;
    return (((((1LL * Fact[n + k] * (n - k + 1)) % MOD) * Inv[k]) % MOD) * Inv[n + 1]) % MOD;
}

inline void Add(int& x, int y){
    x += y;
    if(x >= MOD)
        x -= MOD;
}
void Solve(){
    int ans = 0;
    if(B == 0){
        cout << "1\n";
        return;
    }
    for(int k = 0; k <= N - B - 1 && A - k >= 0; k++){
        int set0Ways = Combinations(N - B - k - 1 + A - k, A - k);
        Add(ans, (1LL * set0Ways * CatalanTriangle(B - 1, k)) % MOD);
    }
    if(B - (N - B) == B - A)
    Add(ans, CatalanTriangle(B - 1, N - B));
    cout << ans << '\n';
}
int main()
{
    cin >> N >> A >> B;
    precalcFact();
    Solve();
    return 0;
}

### Prompt

Develop a solution in cpp to the problem described below:

We have two indistinguishable pieces placed on a number line. Both pieces are initially at coordinate 0. (They can occupy the same position.)

We can do the following two kinds of operations:

* Choose a piece and move it to the right (the positive direction) by 1.
* Move the piece with the smaller coordinate to the position of the piece with the greater coordinate. If two pieces already occupy the same position, nothing happens, but it still counts as doing one operation.



We want to do a total of N operations of these kinds in some order so that one of the pieces will be at coordinate A and the other at coordinate B. Find the number of ways to move the pieces to achieve it. The answer can be enormous, so compute the count modulo 998244353.

Two ways to move the pieces are considered different if and only if there exists an integer i (1 \leq i \leq N) such that the set of the coordinates occupied by the pieces after the i-th operation is different in those two ways.

Constraints

* 1 \leq N \leq 10^7
* 0 \leq A \leq B \leq N
* All values in input are integers.

Input

Input is given from Standard Input in the following format:


N A B


Output

Print the number of ways to move the pieces to achieve our objective, modulo 998244353.

Examples

Input

5 1 3


Output

4


Input

10 0 0


Output

1


Input

10 4 6


Output

197


Input

1000000 100000 200000


Output

758840509

### Response

```cpp
#include <iostream>
using namespace std;
int N, A, B;
int Fact[20000005], Inv[20000005];
const int MOD = 998244353;
int powerLog(int n, int p){
    int sol = 1;
    while(p){
        if(p & 1)
            sol = (1LL * sol * n) % MOD;
        p /= 2;
        n = (1LL * n * n) % MOD;
    }
    return sol;
}
void precalcFact(){
    Fact[0] = 1;
    Inv[0] = 1;
    for(int i = 1; i <= 20000000; i++)
        Fact[i] = (1LL * Fact[i - 1] * i) % MOD;
    Inv[20000000] = powerLog(Fact[20000000], MOD - 2);
    for(int i = 20000000 - 1; i >= 0; i--)
        Inv[i] = (1LL * Inv[i + 1] * (i + 1)) % MOD;
}

int Combinations(int n, int k){
    return (((1LL * Fact[n] * Inv[k]) % MOD) * Inv[n - k]) % MOD;
}
int CatalanTriangle(int n, int k){
    if(n < k)
        return 0;
    return (((((1LL * Fact[n + k] * (n - k + 1)) % MOD) * Inv[k]) % MOD) * Inv[n + 1]) % MOD;
}

inline void Add(int& x, int y){
    x += y;
    if(x >= MOD)
        x -= MOD;
}
void Solve(){
    int ans = 0;
    if(B == 0){
        cout << "1\n";
        return;
    }
    for(int k = 0; k <= N - B - 1 && A - k >= 0; k++){
        int set0Ways = Combinations(N - B - k - 1 + A - k, A - k);
        Add(ans, (1LL * set0Ways * CatalanTriangle(B - 1, k)) % MOD);
    }
    if(B - (N - B) == B - A)
    Add(ans, CatalanTriangle(B - 1, N - B));
    cout << ans << '\n';
}
int main()
{
    cin >> N >> A >> B;
    precalcFact();
    Solve();
    return 0;
}

```