#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param data int整型一维数组 
# @return int整型
#

class Solution:
    def InversePairs(self , data: List[int]) -> int:
        # write code here
        if not data:
            return 0
        mark = [x for x in data]
        res = [0]
        self.merge_sort(data,0,len(data)-1,res,mark)
#         print(data)
        return res[0]
    
    def merge_sort(self,data,left,right,res,mark):
#         print(left,right)
        if left>=right:
            return
        mid = int((left+right)/2)
        self.merge_sort(data, left, mid, res,mark)
        self.merge_sort(data, mid+1, right, res,mark)
        self.merge(data,left,mid,right,res,mark)
    
    def merge(self,data,left,mid,right,res,mark):
#         print(data,left,mid,right)
        k = left
        i,j = left,mid+1
        while i<=mid and j<=right:
            if data[i] > data[j]:
                res[0] += mid - i + 1
                mark[k] = data[j]
                j += 1
            else:
                mark[k] = data[i]
                i += 1
            k += 1
        while i<= mid:
            mark[k] = data[i]
            k += 1
            i += 1
        while j<=right:
            mark[k] = data[j]
            k += 1
            j += 1
        for i in range(left,right+1):
            data[i] = mark[i]
        res[0] %= 1000000007
#         print(data,left,mid,right)
#         print('------>')
#         data[left:right+1] = mark[left:right+1]