#pragma GCC ("O3")
#include <bits/stdc++.h>
#define ll long long
using namespace std;
static FILE *fr, *fw;
static int N;
static int* V;
static long long int numero_ribaltamenti;
vector<ll> tree;


void update(ll v,ll tl,ll tr,ll idx_,ll val_)
{
    if(tl==tr)
    {
        tree[v]=val_;
        return;
    }
    else
    {
        ll tm=(tl+tr)/2;
        if(tm>=idx_)
        {
            update(2*v,tl,tm,idx_,val_);
        }
        else
        {
            update(2*v+1,tm+1,tr,idx_,val_);
        }
        tree[v]=tree[2*v]+tree[2*v+1];
        return;

    }
}

ll query(ll v,ll tl,ll tr,ll l, ll r)
{
    if(l>r)
    {
        return 0;
    }
    else if(tl==l and tr==r)
    {
        return tree[v];
    }
    else
    {
        ll tm=(tl+tr)/2;
        return query(2*v,tl,tm,l,min(r,tm))+query(2*v+1,tm+1,tr,max(l,tm+1),r);
    }
}


ll cnt_inv(vector<ll> &a)
{
    ll sol_=0;
    ll N=a.size();
    tree.assign(4*N,0);
    for(int i=0;i<N;i++)
    {
        sol_+=query(1,0,N-1,a[i]/2+1,N-1);
        //cout<<sol_;
        update(1,0,N-1,a[i]/2,1);
    }
    return sol_;


}







long long int paletta_sort(int N, int* V)
{   

    vector<ll> p;
    vector<ll> d;
    for(int i=0;i<N;i++)
    {
        if(i%2==1)
        {
            d.push_back(V[i]);
        }
        else
        {
            p.push_back(V[i]);
        }
    }

    for(auto &x:p)
    {
        if(x%2==1)
        {
            return -1;
        }
    }
    for(auto &x:d)
    {
        if(x%2==0)
        {
            return -1;
        }
    }
    return cnt_inv(p)+cnt_inv(d);
}