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 JavaScript (node.js v5.12) (judge verdict: Wrong Answer)

function Main(input) {
  var N = parseInt(input.split("\n")[0].split(" ")[0]);
  var K = parseInt(input.split("\n")[0].split(" ")[1]);
  var tmpList = input.split("\n")[1];
  var tmpListAonly = tmpList.split(" ").map((tmpListAonly)=>Number(tmpListAonly));
  var tmpListBonly = (tmpList + " " + tmpList).split(" ").map((tmpListBonly)=>Number(tmpListBonly));
  
  var flag = false;
  for(var i = 0; i < tmpListAonly.length - 1; i++){
    if(tmpListAonly[i] != tmpListAonly[i + 1]){
      flag = true; 
      break;
    }
  }
  if(!flag){
     console.log("0");
    return;
  }else{
     var resultList = [];
    var result = 0;
     for(var i = 0; i < tmpListAonly.length; i++){
       for(var j = i + 1; j < tmpListAonly.length; j++){
         var mae = tmpListAonly[i];
         var ato = tmpListAonly[j];
         if(mae > ato){
            result++;
         }
       }
     }
    resultList.push(result);
    result = 0;
	for(var i = 0; i < tmpListBonly.length; i++){
       for(var j = i + 1; j < tmpListBonly.length; j++){
         var mae = tmpListBonly[i];
         var ato = tmpListBonly[j];
         if(mae > ato){
            result++;
         }
       }
     }
    resultList.push(result);
    result = 0;
    if(K <= 2){
       console.log(resultList[K - 1]);
       }else{
         var count = 2;
        while(count != K){
          var nextAdd = resultList[0] + resultList[1] + resultList[1];
          resultList.push(nextAdd);
          resultList.shift();
          count++;
        }
         console.log(resultList[1] % (1e9 + 7));
       }
  }
}

Main(require("fs").readFileSync("/dev/stdin", "utf8"));