Problem:
Score : 300 points

Problem Statement

We have a sequence of N integers A~=~A_0,~A_1,~...,~A_{N - 1}.

Let B be a sequence of K \times N integers obtained by concatenating K copies of A. For example, if A~=~1,~3,~2 and K~=~2, B~=~1,~3,~2,~1,~3,~2.

Find the inversion number of B, modulo 10^9 + 7.

Here the inversion number of B is defined as the number of ordered pairs of integers (i,~j)~(0 \leq i < j \leq K \times N - 1) such that B_i > B_j.

Constraints

All values in input are integers.

1 \leq N \leq 2000

1 \leq K \leq 10^9

1 \leq A_i \leq 2000

Input

Input is given from Standard Input in the following format:

N K
A_0 A_1 ... A_{N - 1}

Output

Print the inversion number of B, modulo 10^9 + 7.

Sample Input 1

2 2
2 1

Sample Output 1

3

In this case, B~=~2,~1,~2,~1. We have:

B_0 > B_1

B_0 > B_3

B_2 > B_3

Thus, the inversion number of B is 3.

Sample Input 2

3 5
1 1 1

Sample Output 2

0

A may contain multiple occurrences of the same number.

Sample Input 3

10 998244353
10 9 8 7 5 6 3 4 2 1

Sample Output 3

185297239

Be sure to print the output modulo 10^9 + 7.

Solution in C (GCC 5.4.1) (judge verdict: Accepted)

#include <stdio.h>
#define mod 1000000007

int main(void){
  int i,j;
  int n;
  long long k;
  int a[2000];
  long long ans=0;

  scanf("%d %lld", &n, &k);
  int R[n];
  int L[n];
  //R[n]はa[n]の右にあるa[n]より小さい値

  for(i=0; i<n; i++){
    scanf("%d", &a[i]);
  }

  for(i=0; i<n; i++){
    R[i]=0;
    L[i]=0;
    //R[i],L[i]を求める
    //L[i]
    for(j=0; j<i; j++){
      if(a[j]<a[i]){
        L[i]++;
      }
    }
    //R[i]
    for(j=i+1; j<n; j++){
      if(a[j]<a[i]){
        R[i]++;
      }
    }
    // printf("L=%d R=%d\n", L[i], R[i]);
    //R[i]*(k+(k-1)+...+1)
    //右を見て

    // ans+=(R[i]*(k%mod)*((k+1)%mod)/2)%mod;
    ans+=(R[i]*(((k*(k+1))/2)%mod))%mod;
    ans%=mod;
    // ans+=(L[i]*(k%mod)*((k-1)%mod)/2)%mod;
    ans+=(L[i]*(((k*(k-1))/2)%mod))%mod;
    ans%=mod;
  }
  ans%=mod;
  printf("%lld\n", ans);

  return 0;
}