#include <bits/stdc++.h>
#include <iostream>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
const int MAXN = 1e6+5;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ost;
typedef long long ll;
int n, cnt = 1, tr[MAXN*64][2], suf[MAXN], a[MAXN];
ll st[MAXN*64];
ost s;
//intended is to coord compress but 🐒
void update(int node, ll l, ll r, ll i, ll x){
if(l == r){
st[node] = x;
return;
}
ll mid = (l+r)>>1;
if(i <= mid){
if(!tr[node][0]) tr[node][0] = ++cnt;
update(tr[node][0], l,mid,i,x);
}
else{
if(!tr[node][1]) tr[node][1] = ++cnt;
update(tr[node][1],mid+1,r,i,x);
}
st[node] = st[tr[node][0]] + st[tr[node][1]];
}
ll query(int node, ll l, ll r, ll x, ll y){
if(x > r || y < l) return 0;
if(x <= l && y >= r) return st[node];
ll mid = (l+r)>>1;
return query(tr[node][0],l,mid,x,y) + query(tr[node][1], mid+1,r,x,y);
}
int main(){
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
s.insert(a[n]);
for(int i = n-1; i >= 1; i--){
suf[i] = s.order_of_key(a[i]);
s.insert(a[i]);
}
for(int i = 1; i <= n; i++) cout << suf[i] << "\n";
long long ans = 0;
for(int i = n; i >= 1; i--){
ans += query(1,1,1e9, a[i], 1e9);
update(1,1,1e9, a[i], suf[i]);
}
cout << ans << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKCmNvbnN0IGludCBNQVhOID0gMWU2KzU7Cgp0eXBlZGVmIHRyZWU8aW50LCBudWxsX3R5cGUsIGxlc3M8aW50PiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4gb3N0OwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CgppbnQgbiwgY250ID0gMSwgdHJbTUFYTio2NF1bMl0sIHN1ZltNQVhOXSwgYVtNQVhOXTsKCmxsIHN0W01BWE4qNjRdOwoKb3N0IHM7CgovL2ludGVuZGVkIGlzIHRvIGNvb3JkIGNvbXByZXNzIGJ1dCDwn5CSCgp2b2lkIHVwZGF0ZShpbnQgbm9kZSwgbGwgbCwgbGwgciwgbGwgaSwgbGwgeCl7CiAgICBpZihsID09IHIpewogICAgICAgIHN0W25vZGVdID0geDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbGwgbWlkID0gKGwrcik+PjE7CgogICAgaWYoaSA8PSBtaWQpewogICAgICAgIGlmKCF0cltub2RlXVswXSkgdHJbbm9kZV1bMF0gPSArK2NudDsKICAgICAgICB1cGRhdGUodHJbbm9kZV1bMF0sIGwsbWlkLGkseCk7CiAgICB9CiAgICBlbHNlewogICAgICAgIGlmKCF0cltub2RlXVsxXSkgdHJbbm9kZV1bMV0gPSArK2NudDsKICAgICAgICB1cGRhdGUodHJbbm9kZV1bMV0sbWlkKzEscixpLHgpOwogICAgfQoKICAgIHN0W25vZGVdID0gc3RbdHJbbm9kZV1bMF1dICsgc3RbdHJbbm9kZV1bMV1dOwogICAKfQoKbGwgcXVlcnkoaW50IG5vZGUsIGxsIGwsIGxsIHIsIGxsIHgsIGxsIHkpewogICAgaWYoeCA+IHIgfHwgeSA8IGwpIHJldHVybiAwOwoKICAgIGlmKHggPD0gbCAmJiB5ID49IHIpIHJldHVybiBzdFtub2RlXTsKICAgIGxsIG1pZCA9IChsK3IpPj4xOwogICAgcmV0dXJuIHF1ZXJ5KHRyW25vZGVdWzBdLGwsbWlkLHgseSkgKyBxdWVyeSh0cltub2RlXVsxXSwgbWlkKzEscix4LHkpOwp9CgppbnQgbWFpbigpewogICAgY2luID4+IG47CgogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOwoKICAgIHMuaW5zZXJ0KGFbbl0pOwoKICAgIGZvcihpbnQgaSA9IG4tMTsgaSA+PSAxOyBpLS0pewogICAgICAgIHN1ZltpXSA9IHMub3JkZXJfb2Zfa2V5KGFbaV0pOwogICAgICAgIHMuaW5zZXJ0KGFbaV0pOwogICAgfQogICAgCiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY291dCA8PCBzdWZbaV0gPDwgIlxuIjsKCgogICAgbG9uZyBsb25nIGFucyA9IDA7CiAgICBmb3IoaW50IGkgPSBuOyBpID49IDE7IGktLSl7CiAgICAgICAgYW5zICs9IHF1ZXJ5KDEsMSwxZTksIGFbaV0sIDFlOSk7CiAgICAgICAgdXBkYXRlKDEsMSwxZTksIGFbaV0sIHN1ZltpXSk7CiAgICB9CgogICAgY291dCA8PCBhbnMgPDwgIlxuIjsKCgoKCn0=