#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5;
struct arbol {
  int izq, der, cen;
  arbol *hijoIzq, *hijoDer;
  int cant;
  ll suma;
  arbol(int izq, int der)
      : izq(izq),
        der(der),
        cen((izq + der) / 2),
        hijoIzq(nullptr),
        hijoDer(nullptr),
        cant(0),
        suma(0LL) {}
  void inserta(int x, ll i) {
    cant++;
    suma += i;
    if (izq == der) return;
    if (x <= cen) {
      if (!hijoIzq) hijoIzq = new arbol(izq, cen);
      hijoIzq->inserta(x, i);
    } else {
      if (!hijoDer) hijoDer = new arbol(cen + 1, der);
      hijoDer->inserta(x, i);
    }
  }
  pair<int, ll> consulta(int y) {
    if (y < izq) {
      return pair<int, ll>(cant, suma);
    }
    auto i = (y < cen && hijoIzq) ? hijoIzq->consulta(y) : pair<int, ll>(0, 0);
    auto d = (hijoDer) ? hijoDer->consulta(y) : pair<int, ll>(0, 0);
    return pair<int, ll>(i.first + d.first, i.second + d.second);
  }
};
int main() {
  ll n;
  scanf("%lld", &n);
  double res = 0;
  for (ll k = 2; k <= n; k++) {
    res += (n - k + 1) * k * (k - 1);
  }
  res /= 4;
  arbol A(1, n + 1);
  for (int i = 1; i <= n; i++) {
    int ai;
    scanf("%d", &ai);
    auto p = A.consulta(ai);
    res += p.first * (n * (n + 1) / 2) - (n - i + 1) * p.second;
    A.inserta(ai, i);
  }
  res = 2 * res / (n * (n + 1));
  printf("%.20lf\n", res);
}
