#include <bits/stdc++.h>
using namespace std;
const int maxn = 20;
long long dp[(1 << 20) + 66];
long long f[maxn + 6][maxn + 6];
long long sum[26];
int cnt[26];
int n, a[400006];
bool mybool[26];
set<int> Set;
set<int>::iterator it;
map<int, int> Map;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), Set.insert(a[i]);
  int m = 0;
  for (it = Set.begin(); it != Set.end(); ++it) {
    ++m;
    Map[*it] = m;
  }
  for (int i = 1; i <= n; i++) a[i] = Map[a[i]];
  for (int i = n; i > 0; i--) {
    cnt[a[i]]++;
    sum[a[i]] += i;
    for (int j = 1; j <= m; j++) {
      if (a[i] != j) {
        f[a[i]][j] += cnt[j];
      }
    }
  }
  memset(dp, 0x3f, sizeof(dp));
  dp[0] = 0;
  for (int i = 0; i < (1 << m) - 1; i++) {
    long long left = 0;
    for (int j = 0; j < m; j++) {
      if (i & (1 << j)) left += cnt[j + 1];
    }
    for (int j = 0; j < m; j++) {
      if (i & (1 << j)) continue;
      long long ttmp = sum[j + 1];
      for (int k = 0; k < m; k++) {
        if (i & (1 << k)) {
          ttmp += f[j + 1][k + 1];
        }
      }
      long long tmp = ttmp - left * cnt[j + 1] -
                      (long long)cnt[j + 1] * (cnt[j + 1] + 1) / 2;
      assert(tmp >= 0);
      dp[i | (1 << j)] = min(dp[i | (1 << j)], dp[i] + tmp);
    }
  }
  printf("%lld", dp[(1 << m) - 1]);
  return 0;
}
