atcoder#AGC045D. [AGC045D] Lamps and Buttons

[AGC045D] Lamps and Buttons

配点 : 12001200

問題文

11 から NN までの番号のついた NN 個のランプと,11 から NN までの番号のついた NN 個のボタンがあります. 最初,ランプ 1,2,,A1,2,\cdots,A は点灯しており,それ以外のランプは点灯していません.

すぬけくんとりんごさんは,次のようなゲームを行うことにしました.

  • まず,りんごさんが (1,2,,N)(1,2,\cdots,N) の順列 (p1,p2,,pN)(p_1,p_2,\cdots,p_N) を生成する. この順列は N!N! 通りの中から一様ランダムに選ばれる. すぬけくんは,この順列を知らされない.
  • 次に,すぬけくんは,以下の操作を好きなだけ繰り返す.
    • 現在点灯しているランプを 11 つ選ぶ(そのようなランプがない場合は操作を行えない). 選んだランプの番号を ii とする. そして,ボタン ii を押す. すると,ランプ pip_i の状態が反転する.つまり,ランプ pip_i がもともと点灯しているなら消灯し,もともと点灯していないなら点灯する.
  • 現在点灯しているランプを 11 つ選ぶ(そのようなランプがない場合は操作を行えない). 選んだランプの番号を ii とする. そして,ボタン ii を押す. すると,ランプ pip_i の状態が反転する.つまり,ランプ pip_i がもともと点灯しているなら消灯し,もともと点灯していないなら点灯する.

すぬけくんは,常に,どのランプが点灯しているかを知ることができます. すぬけくんの勝利条件は,すべてのランプを点灯した状態にすることです. これが不可能と判明した時点ですぬけくんは負けを認めます. すぬけくんが最適に行動するとき,勝率はいくらでしょうか?

すぬけくんの勝率を ww とした時,w×N!w \times N! は整数になります. w×N!w \times N!109+710^9+7 で割ったあまりを求めてください.

制約

  • 2N1072 \leq N \leq 10^7
  • 1Amin(N1,5000)1 \leq A \leq \min(N-1,5000)

入力

入力は以下の形式で標準入力から与えられる.

NN AA

出力

すぬけくんの勝率を ww とした時,w×N!w \times N!109+710^9+7 で割ったあまりを出力せよ.

3 1
2

すぬけくんはまず,ボタン 11 を押します. ランプ 11 が消灯した場合はすぬけくんの負けです. そうでないときは,新しく点灯したランプに対応するボタンを押します. ここで残っていたランプが点灯すれば,すぬけくんの勝ちです. 逆に,ランプ 11 が消灯した場合,すぬけくんの負けです. このゲームの勝率は 1/31/3 なので,(1/3)×3!=2(1/3)\times 3!=2 を出力します.

3 2
3
8 4
16776
9999999 4999
90395416