#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int S = 1;
vector<ll>st;
vector<int>V; int N;
void build(int n, int sl, int sr){
	if(sl == sr){
		st[n] = 1;
		return;
	}
	int m = sl + (sr - sl) / 2;
	build(2 * n, sl, m);
	build(2 * n + 1, m + 1, sr);
	st[n] = st[2 * n] + st[2 * n + 1];
	
}
ll query(int n, int sl, int sr, int ql, int qr){
	if(ql > sr or qr < sl) return 0;
	if(sl >= ql and sr <= qr) return st[n];
	int m = sl + (sr - sl) / 2;
	return query(2 * n, sl, m, ql, qr) + query(2 * n + 1, m + 1, sr, ql, qr);
}
void change(int n, int sl, int sr, int pos){
	if(sl > pos or sr < pos) return;
	if(sl == sr){
		st[n]++;
		return;
	}
	int m = sl + (sr - sl) / 2;
	change(2 * n, sl, m, pos);
	change(2 * n, m + 1, sr, pos);
	st[n] = st[2 * n] + st[2 * n + 1];
}
ll c(vector<int>V1, int N1){
	V = V1; N = N1;
	while(S < N) S <<= 1,
	st.assign(S, 0);

	build(1, 0, S - 1);
	ll ans = 0;
	for(int i = 0; i < N; i++){
		ans += query(1, 0, S - 1, 0, V[i] - 1);
		change(1, 0, S - 1, V[i]);
	}
	return ans;
}
long long paletta_sort(int N, int V[]) {
    vector<int>A, B;
    for(int i = 0; i < N; i++){
    	if(i % 2 != V[i] % 2) return -1;
    	if(i % 2 == 0){
    		A.push_back(V[i]);
		}
		else{
			B.push_back(V[i] / 2);
		}
	}

	ll ans = c(A, A.size()) + c(B, B.size());
	return ans;
}
