#include <bits/stdc++.h>   using namespace std;   using ll = long long int;   using dd = double;   using pii = pair<int, int>;   using pll = pair<ll, ll>;   ll INFLL = (ll)2e18, MOD = 1e9 + 7;   const int INF = 0x6f6f6f6f;   vector<vector<ll>> adj;   vector<int> vis;   int dx8[] = {0, 1, 1, 1, 0, -1, -1, -1}, dy8[] = {1, 1, 0, -1, -1, -1, 0, 1},       dx4[] = {0, 1, 0, -1}, dy4[] = {1, 0, -1, 0};   inline ll mexp(ll x, ll n, ll m) {     ll res = 1;     while (n) {       if (n & 1) res = (res * x) % m;       n >>= 1;       x = ((x % m) * (x % m)) % m;     }     return res;   }   inline bool ispow2(ll x) { return x && (!(x & (x - 1))); }   inline ll gcd(ll x, ll y) {     pll p{x, y};     while (p.second) p = {p.second, p.first % p.second};     return p.first;   }   int main(void) {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     cout << fixed;     cerr << fixed;     cout << setprecision(10);     cerr << setprecision(3);     mt19937 genr(chrono::high_resolution_clock::now().time_since_epoch().count());     int n;     cin >> n;     vector<int> seq(n + 1);     map<int, int> m;     for (int i = 0; i < n; ++i) {       int t;       cin >> t;       m[t] = i + 1;     }     int ct = 1;     for (auto& e : m) seq[e.second] = ct++;     m.clear();     vector<ll> tree(n + 1, 0);     auto sum = [&](int pos) {       ll ret = 0;       while (pos) {         ret += tree[pos];         pos -= pos & -pos;       }       return ret;     };     auto upd = [&](int pos, ll val) {       while (pos <= n) {         tree[pos] += val;         pos += pos & -pos;       }     };     ll ans = 0;     for (int i = 1; i <= n; ++i) {       ll gr = sum(n) - sum(seq[i]);       ll le = seq[i] - 1 - sum(seq[i] - 1);       ans += gr * le;       upd(seq[i], 1);     }     cout << ans <<   n ;     return 0;   }   