class dsu(): n=1 parent_or_size=[-1 for i in range(n)] def __init__(self,N): self.n=N self.num = N self.parent_or_size=[-1 for i in range(N)] def merge(self,a,b): assert 0<=a0: result2.append(result[i]) return result2 def count(self): return self.num n, p, q = map(int,input().split()) mod = 998244353 a = list(range(0, n)) for i in range(p // 2): a[i], a[p - i - 1] = a[p - i - 1], a[i] for i in range(q // 2): a[n - q + i], a[n - i - 1] = a[n - i - 1], a[n - q + i] U = dsu(n) for i in range(n): U.merge(i, a[i]) count = [0] * (n + 1) for v in U.groups(): x = len(v) for i in range(2, 10 ** 5 + 1): if x == 1: break cnt = 0 while x % i == 0: x //= i cnt += 1 count[i] = max(cnt, count[i]) ans = 1 for i in range(1, n + 1): if count[i] >= 1: ans *= pow(i, count[i]) ans %= mod if p > 1 and q > 1: ans *= 2 ans %= mod print(ans)