#include <bits/stdc++.h>
using namespace std;
int num[400005];
int tot = 0;
set<int> st;
int mp[20];
int freq[20];
long long push[20][20];
long long addp[20][1048576];
vector<int> pos[20];
long long sum[20];
int cnt[20];
long long memo[1048576];
long long cost(int mask, int ofst, int id) {
  return sum[id] + addp[id][mask] -
         1LL * (ofst + 1 + ofst + cnt[id]) * cnt[id] / 2;
  ;
}
long long dp(int i, int mask, int ofst) {
  if (i == tot) return 0;
  if (memo[mask] != -1) return memo[mask];
  long long mn = 1000000000000000000;
  int id;
  for (int j = (0); j <= (tot - 1); j++) {
    if ((mask >> j) & 1) continue;
    long long v =
        dp(i + 1, mask | (1 << j), ofst + cnt[j]) + cost(mask, ofst, j);
    if (v < mn) {
      mn = v;
      id = j;
    }
  }
  return memo[mask] = mn;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = (1); i <= (n); i++) {
    scanf("%d", &num[i]);
    --num[i];
    st.insert(num[i]);
  }
  for (auto u : st) {
    mp[u] = tot++;
  }
  for (int i = (0); i <= (tot - 1); i++) pos[i].push_back(0);
  for (int i = (1); i <= (n); i++) {
    num[i] = mp[num[i]];
    int t = num[i];
    pos[t].push_back(i);
    cnt[t]++;
    sum[t] += i;
  }
  memset(push, 0, sizeof(push));
  for (int i = (1); i <= (n); i++) {
    freq[num[i]]++;
    for (int j = (0); j <= (tot - 1); j++) {
      push[num[i]][j] += cnt[j] - freq[j];
    }
  }
  memset(addp, 0, sizeof(addp));
  for (int i = (0); i <= (tot - 1); i++) {
    for (int j = (0); j <= ((1 << tot) - 1); j++) {
      if ((j >> i) & 1) continue;
      for (int k = (0); k <= (tot - 1); k++) {
        if (~(j >> k) & 1) continue;
        addp[i][j] += push[i][k];
      }
    }
  }
  memset(memo, -1, sizeof(memo));
  printf("%lld\n", dp(0, 0, 0));
  return 0;
}
