#include "bits/stdc++.h"
using namespace std;
using ll = long long;

ll merge (vector<int> &v, int l, int m, int r) {
    // A e B sono ordinati
    int a = m - l + 1, b = r - (m + 1) + 1;
    vector<int> A(a), B(b); // prima e seconda metà
    for (int i = 0; i < a; i++)
        A[i] = v[i + l];
    for (int i = 0; i < b; i++)
        B[i] = v[i + m + 1];
    ll ans = 0;
    int ix = l, ia = 0, ib = 0;
    while (ia < a && ib < b) {
        if (A[ia] <= B[ib]) { // prendo un elemento da A senza scambi
            v[ix++] = A[ia++];
        } else { // sposto un elemento da B di a - ia posizioni
            v[ix++] = B[ib++];
            ans += a - ia;
        }
    }
    while (ia < a) // ho finito gli elementi di B
        v[ix++] = A[ia++];
    while (ib < b) // ho finito gli elementi di A
        v[ix++] = B[ib++];
    return ans;
}

ll solve (vector<int> &v, int l, int r) {
    if (l == r) return 0; // non ho più da ordinare (l ed r inclusi)
    int m = (l + r) >> 1;
    return solve(v, l, m) + // ricorro sulla prima metà
           solve(v, m + 1, r) + // ricorro sulla seconda metà
           merge(v, l, m, r); // merge sort sull'intervallo considerato
}

long long paletta_sort(int N, int V[]) {
    bool ok = 1;
    vector<int> a, b;
    for (int i = 0; i < N; i++) {
        if (i & 1) { // dispari
            b.emplace_back(V[i]);
            if (~V[i] & 1) ok = 0;
        } else { // pari
            a.emplace_back(V[i]);
            if ( V[i] & 1) ok = 0;
        }
    }
    if (!ok) return -1; // funziona sempre
    // i casi sono completamente separati
    return solve(a, 0, a.size() - 1) + 
           solve(b, 0, b.size() - 1);
}