C - Sum of Three Inversions Editorial /

Time Limit: 3 sec / Memory Limit: 1024 MiB

配点 : 100

問題文

整数 N, X, Y, K, M が与えられます。長さ N の整数列からなる 3 つ組 (A, B, C) であって、以下の条件をすべて満たす組の個数を M で割ったあまりを求めてください。ただし、数列 ak 番目の要素を a_k と表すこととします。

  • i = 1, 2, \dots, N について、(A_i, B_i, C_i)(1, 2, 3) の順列である。
  • A に含まれる 1, 2 の個数はそれぞれ X, Y である。
  • A の転倒数と B の転倒数と C の転倒数の合計は K である。
転倒数とは? 数列 a の転倒数とは、1 \le i < j \le |a| かつ a_i > a_j を満たす整数組 (i, j) の個数を指します。

制約

  • 入力はすべて整数
  • 2 \le N \le 50
  • 0 \le X, Y \le N
  • X + Y \le N
  • 0 \le K \le \frac{3}{2}N(N - 1)
  • {10}^8 \le M \le {10}^9

入力

入力は以下の形式で与えられる。

N X Y K M

出力

答えを出力せよ。


入力例 1

3 1 1 4 998244353

出力例 1

24

条件を満たす (A, B, C)24 通り存在します。例えば、A = (1, 2, 3), B = (3, 3, 2), C = (2, 1, 1) とすると、(A, B, C) は条件を満たします。


入力例 2

4 0 0 18 123456789

出力例 2

0

条件を満たす (A, B, C) は存在しません。


入力例 3

50 10 20 1000 1000000000

出力例 3

805988728