#include <bits/stdc++.h>
#include <stdio.h>

#define __Shibae__      signed main()
#define IOS             ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define fiopen(Path)    freopen(Path".INP", "r", stdin); freopen(Path".OUT", "w", stdout);
#define fipen(Path)     freopen(Path".INP", "r", stdin);
#define sz(s)           (int)s.size()
#define all(x)          x.begin(), x.end()
#define maxHeap         priority_queue<int>
#define minHeap         priority_queue<int, vector<int>, greater<int>>
#define getBit(x, k)    (((x) >> (k)) & 1)
#define MASK(i)         (1LL << (i))
#define SQR(x)          (1LL * ((x) * (x)))
#define db              double
#define ld              long double
#define ui              unsigned int
#define ll              long long
#define ii              pair<int, int>
#define pli             pair<ll, int>
#define pil             pair<int, ll>
#define pll             pair<ll, ll>
#define fi              first
#define se              second

#define FOR(i, a, b)    for(int i = a, _b = b; i <= _b; i += 1)
#define FOD(i, a, b)    for(int i = a, _b = b; i >= _b; i -= 1)
#define REP(i, a)       for(int i = 0, _a = a; i < _a; i++)
#define pb              push_back
#define fau(u, a)       for(auto &u : a)
#define debug           return cout << "debug", void();

using namespace std;

const ll mod = 1e9 + 7;
const int INF = 1e9 + 7;
const ll INFLL = (ll)2e18 + 7LL;
const ld PI = acos(-1);
const int MAX = 5e5+5;

const int dx[] = {1, -1, 0, 0, -1, 1, 1, -1};
const int dy[] = {0, 0, 1, -1, -1, -1, 1, 1};

mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());

ll Rand(ll l, ll r)
{
    return uniform_int_distribution<ll>(l, r)(rd);
}

template<class SHIBA, class ENGINE>
    bool minimize(SHIBA &x, const ENGINE y)
    {
        if(x > y)
        {
            x = y;
            return true;
        }
        else return false;
    }
template<class SHIBA, class ENGINE>
    bool maximize(SHIBA &x, const ENGINE y)
    {
        if(x < y)
        {
            x = y;
            return true;
        }
        else return false;
    }


/* Template by: Nguyen Nhat Anh from Luong Van Chanh High School for the gifted */
/* From Min Tuoi with love */
        /**       TRY HARD        **/
        /**          ORZ          **/

/* -----------------[ MAIN CODE ]----------------- */

int n;
int a[MAX];
vector<int> arr;

struct FenwickTree
{
    int bit[MAX];

    void update(int i, int k)
    {
        for (i; i <= n; i += i & -i) bit[i] += k;
    }

    int get(int i)
    {
        int res = 0;
        for (; i; i -= i & -i) res += bit[i];
        return res;
    }
}pre, suf;

void input()
{
    cin >> n;
    FOR(i, 1, n)
    {
        cin >> a[i];
        arr.pb(a[i]);
    }
}

void solve()
{
    sort(all(arr));
    arr.resize(unique(all(arr)) - arr.begin());
    FOR(i, 1, n) a[i] = lower_bound(all(arr), a[i]) - arr.begin() + 1;
    pre.update(a[1], 1);
    FOR(i, 2, n) suf.update(a[i], 1);

    ll res = 0;

    FOR(i, 2, n-1)
    {
        suf.update(a[i], -1);
        res += 1LL * pre.get(a[i]-1) * suf.get(a[i] - 1);
        pre.update(a[i], 1);
    }
    cout << res;
}

__Shibae__
{
    FOR(_, 1, 100)
    {
        ofstream out("dooki.inp");

    int n = Rand(1, 100);

    out << n << "\n";
    FOR(i, 1, n) out << Rand(1, 1e9) << " ";

    map<ii, int> map;

/*  Sinh Cay
    FOR(i, 2, n)
//    {
//        int u = Rand(1, i-1);
//        out << u << " " << i << "\n";
//        mp[{u, i}] = mp[{i, u}] = 1;
//    }
//     THem cai nay thi la sinh do thi lien thong n dinh
//    FOR(i, 1, m-n+1)
//    {
//        int u = Rand(1, n-1);
//        int v = Rand(u+1, n);
//        while(mp[{u, v}] == 1)
//        {
//            u = Rand(1, n-1);
//            v = Rand(u+1, n);
//        }
//
//        out << u << " " << v << "\n";
//        mp[{u, v}] = mp[{v, u}]  = 1;
//    }
*/

//    FOR(i, 1, m-n+1) // sinh do thi backy
//    {
//        int u = Rand(1, n-1);
//        int v = Rand(u+1, n);
//        while(mp[{u, v}] == 1)
//        {
//            u = Rand(1, n-1);
//            v = Rand(u+1, n);
//        }
//
//        out << u << " " << v << "\n";
//        mp[{u, v}] = mp[{v, u}]  = 1;
//    }


    out.close();

    system("f.exe");
    system("trau.exe");

    if (system("fc trau.out dooki.out"))
    {
        return 0;
    }

    }


    return 0;
}
