#include //#include using namespace std; //ifstream cin ("x.in"); ofstream cout ("x.out"); const int nmax = 1e5; const int lim = 1000; int n; int v[nmax + 1]; int first[nmax + 1], last[nmax + 1]; int f[nmax / lim + 5][nmax + 1]; int query (int x, int y, int val) { if (x > y) return 0; int bx = (x - 1) / lim + 1, by = (y - 1) / lim + 1; int sol = 0; if (bx == by) { for (int i = x; i <= y; ++ i) sol += (v[ i ] < val); return sol; } for (int i = bx + 1; i <= by - 1; ++ i) { sol += f[ i ][ val ]; } for (int i = x; i <= bx * lim && i <= 2 * n; ++ i) sol += (v[ i ] < val); for (int i = (by - 1) * lim + 1; i <= y; ++ i) sol += (v[ i ] < val); return sol; } int main() { cin.sync_with_stdio(false); cin >> n; for (int i = 1; i <= 2 * n; ++ i) { cin >> v[ i ]; last[ v[ i ] ] = i; if (first[ v[ i ] ] == 0) first[ v[ i ] ] = i; } for (int i = 1; i <= 2 * n; ++ i) { if (i == last[ v[ i ] ]) { v[ i ] = first[ v[ i ] ]; } else { v[ i ] = nmax; } ++ f[(i - 1) / lim + 1][ v[ i ] ]; } for (int i = 1; (i - 1) * lim + 1 <= 2 * n; ++ i) { for (int j = 1; j <= nmax; ++ j) { f[ i ][ j ] += f[ i ][j - 1]; } } long long ans = 0; for (int i = 1; i <= n; ++ i) { ans += query(first[ i ] + 1, last[ i ] - 1, first[ i ]); } cout << ans << "\n"; return 0; }