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 $ で割った余りを出力することに注意してください。