Problem:
Score : 2200 points

Problem Statement

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.

Sample Input 1

5 1 3

Sample Output 1

4

Shown below are the four ways to move the pieces, where (x,y) represents the state where the two pieces are at coordinates x and y.

(0,0)→(0,0)→(0,1)→(0,2)→(0,3)→(1,3)

(0,0)→(0,0)→(0,1)→(0,2)→(1,2)→(1,3)

(0,0)→(0,0)→(0,1)→(1,1)→(1,2)→(1,3)

(0,0)→(0,1)→(1,1)→(1,1)→(1,2)→(1,3)

Sample Input 2

10 0 0

Sample Output 2

1

Sample Input 3

10 4 6

Sample Output 3

197

Sample Input 4

1000000 100000 200000

Sample Output 4

758840509

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include<bits/stdc++.h>
using namespace std;

const int N=20000010,mod=998244353;
int n,A,B,jc[N],inv[N],ans;

int quickmi(int a,int b)
{
	int t=1;
	for (; b; b>>=1,a=1ll*a*a%mod)
		if (b&1) t=1ll*t*a%mod;
	return t;
}

int C(int a,int b)
{
	if (a<b||b<0) return 0;
	return 1ll*jc[a]*inv[b]%mod*inv[a-b]%mod;
}

int main()
{
	jc[0]=1;
	for (int i=1; i<N; i++) jc[i]=1ll*jc[i-1]*i%mod;
	inv[N-1]=quickmi(jc[N-1],mod-2);
	for (int i=N-1; i; i--) inv[i-1]=1ll*inv[i]*i%mod;
	scanf("%d%d%d",&n,&A,&B),ans=0;
	if (A==0&&B==0) return puts("1"),0;
	for (int i=0; i<=A&&i+B<n; i++)
		ans=(ans+1ll*(C(B+i-1,i)-C(B+i-1,i-1)+mod)*C(A-i+n-B-i-1,A-i))%mod;
	if (A+B==n) ans=(ans+1ll*(C(B+A-1,A)-C(B+A-1,A-1)+mod))%mod;
	return printf("%d\n",ans),0;
}