#include <bits/stdc++.h>
using namespace std;

struct segtree{

    int N = 1;
    vector<long long> tree;
    segtree(int n) {
        while(N < n) {
            N*=2;
        }
        tree.resize(2*N);
    }

    void update(int x) {
        tree[N+x] = 1;
        update1((N+x)/2);
    }
    void update1(int x) {
        tree[x] = tree[2*x]+tree[2*x+1];
        if(x != 1) {
            update1(x/2);
        }
    }
    long long query(int l, int r) {
        return query1(l, r, 0, N, 1);
    }
    long long query1(int l, int r, int lora, int rora, int x) {
        if(l >= rora || r <= lora) return 0;
        if(l <= lora && r >= rora) return tree[x];
        int m = (lora+rora)/2;
        return query1(l, r, lora, m, 2*x)+query1(l, r, m, rora, 2*x+1);
    }




};



long long paletta_sort(int N, int V[]) {
    vector<long long> pari, dispari;
    for(int i = 0; i < N; i++) {
        if(i % 2== 0) {
            if (V[i] % 2 == 1) return -1;
            pari.push_back(V[i]);
        }
        else {
            if(V[i] % 2 == 0) return -1;
            dispari.push_back(V[i]);
        }
    }
    segtree dis(dispari.size());
    segtree par(pari.size());
    long long sol = 0;
    for(int i = 0; i < pari.size(); i++) {
        sol+= par.query(pari[i], pari.size());
        par.update(pari[i]);
    }
    for(int i = 0; i < dispari.size(); i++) {
        sol+= dis.query(dispari[i], dispari.size());
        dis.update(dispari[i]);
    }
    return sol;
}


