class Solution {
private:
    int res = 0;
    int kmod = 1000000007;
public:
    int InversePairs(vector<int> data) {
        int n = data.size();
        vector<int> temp(n);
        sort_(data, temp, 0, n-1);
        return res;
    }
    
    void sort_(vector<int>& data, vector<int>& temp, int l, int r){
        if(l >= r){
            return;
        }
        int mid = l + (r - l)/2;
        sort_(data, temp, l, mid);
        sort_(data, temp, mid+1, r);
        merge(data, temp, l, mid, r);
    }
    
    void merge(vector<int>& data, vector<int>& temp, int l, int mid, int r){
        int t = l;
        int i = l, j = mid+1;
        while(i <= mid && j <= r){
            if(data[i] > data[j]){
                temp[t] = data[j];
                t++; j++;
                res += (mid - i + 1);
                res = res % kmod;
            }
            else{
                temp[t] = data[i];
                t++; i++;
            }
        }
        while(i <= mid){
            temp[t] = data[i];
            t++; i++;
        }
        while(j <= r){
            temp[t] = data[j];
            t++; j++;
        }
        
        for(int i=l; i<=r; i++){
            data[i] = temp[i];
        }
        
    }
    
};