int InversePairs(int* data, int dataLen ) {
    // write code here
    static int count = 0;

    if (dataLen <= 1)
        return 0;

    int mid = dataLen / 2, i = 0, j = 0, k = 0, len = dataLen - mid;
    int datacopyl[mid], datacopyr[len];

    for (int w = 0; w < mid; w++)
        datacopyl[w] = data[w];

    for (int w = 0; w < len; w++)
        datacopyr[w] = data[mid + w];

    InversePairs(datacopyl, mid);
    InversePairs(datacopyr, len);

    while (i < mid && j < len) {
        if (datacopyl[i] <= datacopyr[j]) {
            data[k] = datacopyl[i];
            k++;
            i++;
        }

        else {
            data[k] = datacopyr[j];
            count += (mid - i);
            count %= 1000000007;
            k++;
            j++;
        }
    }

    while (i < mid) {
        data[k++] = datacopyl[i];
        i++;
    }
    while (j < len) {
        data[k++] = datacopyr[j];
        j++;
    }

    return (count % 1000000007);
}