func_code_string: #include <bits/stdc++.h>   using namespace std;   long long n, cnt[21][21], pos[21][400001], dp[1 << 20];   vector<long long> v[21];   signed main() {     cin.tie(0);     cout.tie(0);     ios_base::sync_with_stdio(false);     cin >> n;     for (long long i = 1; i <= n; i++) {       long long a;       cin >> a;       a--;       v[a].push_back(i);       pos[a][i]++;     }     for (long long i = 0; i < 20; i++) {       for (long long j = 1; j <= n; j++) {         pos[i][j] += pos[i][j - 1];       }     }     for (long long i = 0; i < 20; i++) {       for (long long j = 0; j < 20; j++) {         if (i == j) continue;         for (auto x : v[i]) {           cnt[i][j] += pos[j][x];         }       }     }     dp[0] = 0;     for (long long i = 1; i < (1 << 20); i++) {       dp[i] = 1000000000000000000;       for (long long j = 0; j < 20; j++) {         if (i >> j & 1) {           long long ans1 = 0;           for (long long k = 0; k < 20; k++) {             if (k == j) continue;             if (i >> k & 1) ans1 += cnt[j][k];           }           dp[i] = min(dp[i], dp[i ^ (1 << j)] + ans1);         }       }     }     cout << dp[(1 << 20) - 1];   }   