F - Flexible Permutation 解説 /

実行時間制限: 2 sec / メモリ制限: 1024 MB

配点 : 600

問題文

正の整数 N が与えられます。

1, 2, \ldots, N を並び替えてできる数列 P_1, P_2, \ldots, P_NN! 通りありますが、そのうち以下の条件を満たすものが何通りあるかを、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