package main
import (
"fmt"
)
const MOD = 998244353
const G = 3
func power(base, exp int) int {
res := 1
base %= MOD
for exp > 0 {
if exp%2 == 1 {
res = (res * base) % MOD
}
base = (base * base) % MOD
exp /= 2
}
return res
}
func inverse(n int) int {
return power(n, MOD-2)
}
func ntt(a []int, invert bool) {
n := len(a)
j := 0
for i := 1; i < n; i++ {
bit := n >> 1
for j&bit != 0 {
j ^= bit
bit >>= 1
}
j ^= bit
if i < j {
a[i], a[j] = a[j], a[i]
}
}
for length := 2; length <= n; length <<= 1 {
half := length >> 1
wLen := power(G, (MOD-1)/length)
if invert {
wLen = inverse(wLen)
}
for i := 0; i < n; i += length {
w := 1
for j := 0; j < half; j++ {
u := a[i+j]
v := (a[i+j+half] * w) % MOD
a[i+j] = (u + v) % MOD
a[i+j+half] = (u - v + MOD) % MOD
w = (w * wLen) % MOD
}
}
}
if invert {
nInv := inverse(n)
for i := 0; i < n; i++ {
a[i] = (a[i] * nInv) % MOD
}
}
}
func multiply(a, b []int) []int {
n := 1
for n < len(a)+len(b) {
n <<= 1
}
A := make([]int, n)
B := make([]int, n)
copy(A, a)
copy(B, b)
ntt(A, false)
ntt(B, false)
for i := 0; i < n; i++ {
A[i] = (A[i] * B[i]) % MOD
}
ntt(A, true)
resLen := len(a) + len(b) - 1
res := make([]int, resLen)
copy(res, A[:resLen])
return res
}
func solve(l, r int) []int {
if l == r {
return []int{l % MOD, 1}
}
mid := l + (r-l)/2
return multiply(solve(l, mid), solve(mid+1, r))
}
func nCr(n, r int) int {
if r < 0 || r > n {
return 0
}
num := 1
den := 1
for i := 1; i <= r; i++ {
num = (num * (n - i + 1)) % MOD
den = (den * i) % MOD
}
return (num * inverse(den)) % MOD
}
func main() {
var n, a, b int
if _, err := fmt.Scan(&n, &a, &b); err != nil {
return
}
if a == 0 || b == 0 || a+b-2 > n-1 {
fmt.Println(0)
return
}
if n == 1 {
if a == 1 && b == 1 {
fmt.Println(1)
} else {
fmt.Println(0)
}
return
}
poly := solve(0, n-2)
k := a + b - 2
if k >= len(poly) {
fmt.Println(0)
return
}
ans := (poly[k] * nCr(k, a-1)) % MOD
fmt.Println(ans)
}