AT_jsc2019_qual_b Kleene Inversion

Description

[problemUrl]: https://atcoder.jp/contests/jsc2019-qual/tasks/jsc2019_qual_b 長さ $ N $ の整数列 $ A~=~A_0,~A_1,~...,~A_{N\ -\ 1} $ があります。 $ A $ を $ K $ 回繰り返した長さ $ K\ \times\ N $ の整数列を $ B $ とします。たとえば $ A~=~1,~3,~2 $、$ K~=~2 $ のとき、 $ B~=~1,~3,~2,~1,~3,~2 $ です。 $ B $ の転倒数を $ 10^9\ +\ 7 $ で割った余りを求めてください。 ここで $ B $ の転倒数は、整数の順序対 $ (i,~j)~(0\ \leq\ i\ \ B_j $ を満たすものの個数として定義されます。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ N $ $ K $ $ A_0 $ $ A_1 $ $ ... $ $ A_{N\ -\ 1} $

Output Format

$ B $ の転倒数を $ 10^9\ +\ 7 $ で割った余りを出力せよ。

Explanation/Hint

### 制約 - 入力は全て整数である。 - $ 1\ \leq\ N\ \leq\ 2000 $ - $ 1\ \leq\ K\ \leq\ 10^9 $ - $ 1\ \leq\ A_i\ \leq\ 2000 $ ### Sample Explanation 1 このケースでは $ B~=~2,~1,~2,~1 $ です。 - $ B_0\ >\ B_1 $ - $ B_0\ >\ B_3 $ - $ B_2\ >\ B_3 $ であり、$ B $ の転倒数は $ 3 $ です。 ### Sample Explanation 2 $ A $ は同じ数を複数含むこともあります。 ### Sample Explanation 3 $ 10^9\ +\ 7 $ で割った余りを出力することに注意してください。