#include <bits/stdc++.h>

#ifdef DEBUG
    #define debug(...) println(cerr, __VA_ARGS__)
#else
    #define debug(...)
#endif

#define forall(i,s,e) for(int i=(s);i<(e);i++)

using namespace std;

namespace rg = ranges;
namespace vw = views;

#define rev vw::reverse

using ll = long long;

using vb = vector<bool>;
using vi = vector<int>;
using vl = vector<ll>;

using aii = array<int, 2>;
using all = array<ll, 2>;

constexpr ll inf = 1e17;

struct segtree {
    vi T;
    int N;

    segtree(int n) {
        N = n;
        T.assign(2*N, 0);
    }

    void upd(int i, int x) {
        i += N;
        T[i] = x;
        for(i/=2; i>0; i/=2)
            T[i] = T[2*i] + T[2*i+1];
    }

    int query(int l, int r) {
        l += N, r += N;
        int res = 0;
        for(; l<r; l/=2, r/=2) {
            if(l%2) res += T[l++];
            if(r%2) res += T[--r];
        }
        return res;
    }
};

ll inv(int n, int m, vi v) {
    ll res = 0;

    segtree st(m);

    forall(i, 0, n) {
        res += st.query(v[i], m);
        st.upd(v[i], 1);
    }

    return res;
}

long long paletta_sort(int N, int V[]) {

    vi even((N+1)/2);
    vi odd(N/2);
    
    forall(i, 0, N) {
        if((V[i]%2) != (i%2)) return -1;
        if(i%2) odd[i/2] = V[i];
        else even[i/2] = V[i];
    }

    return inv(even.size(), N, even) + inv(odd.size(), N, odd);
}