#include <algorithm>
#include <vector>
class AntiOrder {
  public:
    int count(vector<int> A, int n) {
        // write code here
        const int mod = 1e9 + 7;
        vector<int> sortedA = A;
        sort(sortedA.begin(), sortedA.end());
        sortedA.erase(unique(sortedA.begin(), sortedA.end()), sortedA.end());
        auto getRank = [&](int x) {
            return lower_bound(sortedA.begin(), sortedA.end(), x) - sortedA.begin() + 1;
        };
        vector<int> BIT(sortedA.size() +2);
        auto update = [&](int x){
            while (x < BIT.size() ) {
                BIT[x] +=1;
                x += x& (-x);        
            }

        };
        auto query = [&](int x) {
            int res =0;
            while (x>0) {
                res += BIT[x];
                x -= x& (-x);
            
            }
            return res;
        };
        int res = 0;
        for(int i=n-1; i>=0;--i){
            int rank = getRank(A[i]);
            res = (res + query(rank -1)) %mod;
            update(rank);

        }
        return res;


    }
};