#include <bits/stdc++.h>

using namespace std;

pair<long long, vector<int>> merge(const vector<int>& a, const vector<int>& b){
	vector<int> x;
	long long count = 0;
	int ca = 0, cb = 0;
	while (ca < a.size() || cb < b.size()){
		if (ca == a.size() || b[0] < a[0]){
			count += a.size() - ca;
			x.push_back(b[0]);
			cb++;
		}
		else {
			x.push_back(a[0]);
			ca++;
		}
	}
	return {count, x};
}

pair<long long, vector<int>> mergeSort(const vector<int>& xs){
	vector<vector<int>> groups(0);
	for (int x : xs) groups.push_back({x});

	long long count = 0;

	while (groups.size() > 1){
		vector<vector<int>> newGroups(0);
		for (int i = 0; i < groups.size()-1; i+= 2){
			auto [c, v] = merge(groups[i], groups[i+1]);
			count += c;
			newGroups.push_back(v);
		}
		if (groups.size() % 2 == 1){
			newGroups.push_back(groups.back());
		}
		groups = newGroups;
	}

	return {count, groups.back()};
}

long long paletta_sort(int N, int V[]) {
    vector<int> pari;
    vector<int> dispari;

	for (int i = 0; i < N; i++){
		if (i % 2 == 0){
			pari.push_back(V[i]);
		}
		else {
			dispari.push_back(V[i]);
		}
	}

	auto [c1, px] = mergeSort(pari);
	auto [c2, dx] = mergeSort(dispari);
	
	bool ok = true;
	for (int i = 0; i < min(dx.size(), px.size()); i++){
		if (pari[i] > dispari[i]){
			ok = false;
			break;
		}
	}

	if (ok == false) 	return -1;
	else 				return c1+c2;

}