F - Flexible Permutation
Editorial
/
Time Limit: 2 sec / Memory Limit: 1024 MB
配点 : 600 点
問題文
正の整数 N が与えられます。
1, 2, \ldots, N を並び替えてできる数列 P_1, P_2, \ldots, P_N は N! 通りありますが、そのうち以下の条件を満たすものが何通りあるかを、10^{9} + 7 で割ったあまりを求めるプログラムを作成してください。
- P_i > i を満たすような i (= 1, 2, \dots, N) がちょうど A 個であり、
- P_i < i を満たすような i (= 1, 2, \dots, N) がちょうど B 個であり、
- P_i = i を満たすような i (= 1, 2, \dots, N) がちょうど N - A - B 個です。
制約
- 1 \le N \le 300
- 0 \le A, B \le N
- A + B \le N
- 与えられる入力はすべて整数です。
部分点
この問題には部分点が設定されています。
- N \leq 15 を満たす入力に正解すると、300 点が与えられます。
入力
入力は以下の形式で標準入力から与えられます。
N A B
出力
条件を満たす順列の個数を 10^{9} + 7 で割ったあまりを一行に出力してください。
入力例 1
3 1 1
出力例 1
3
(1, 3, 2), (3, 2, 1), (2, 1, 3) の 3 個が条件を満たします。
入力例 2
6 2 3
出力例 2
126
入力例 3
10 5 0
出力例 3
0
条件を満たす順列が存在しないこともあります。
入力例 4
256 155 51
出力例 4
125746759