#include <bits/stdc++.h>
using namespace std;
using ll = long long;

bool check(int N, int V[]) {

	bool pp, dd;
	
	for (int i = 0; i < N; i++) {
		
		pp = (V[i]%2 == 0) && (i%2 == 0);
		dd = (V[i]%2 != 0) && (i%2 != 0);
		if (!(pp ^ dd)) return false;
		
	}
	
	return true;
}

ll merge(vector<int> &sx, vector<int> &dx, vector<int> &v) {
	
	ll ans = 0;
	int p1 = 0, p2 = 0;
	int idx = 0;
	
	while (p1 < (int)sx.size() && p2 < (int)dx.size()) {
		
		if (sx[p1] < dx[p2]) {
			
			v[idx] = sx[p1];
			p1 ++;
			
		}
		else {
			
			ans += abs((ll)sx.size() - p1);
			v[idx] = dx[p2];
			p2 ++;
			
		}
		
		idx ++;
		
	}
	
	while (p1 < (int)sx.size()) {
		
		v[idx] = sx[p1];
		p1 ++;
		idx ++;
		
	}
	while (p2 < (int)dx.size()) {
		
		v[idx] = dx[p2];
		p2 ++;
		idx ++;
		
	}
	
	return ans;
	
}

ll merge_sort(int n, vector<int> &v) {
	
	if (n == 1) return 0;
	ll ans = 0;
	vector<int> sx, dx;
	
	// diviso in 2 parti
	for (int i = 0; i < n; i++) {
		
		if (i < (n/2)) sx.push_back(v[i]);
		else dx.push_back(v[i]);
		
	}
	
	ans = merge_sort((int)sx.size(), sx) + merge_sort((int)dx.size(), dx);
	ans += merge(sx, dx, v);
	return ans;
}

ll paletta_sort(int N, int V[]) {
	
	if (!check(N, V)) return -1;
	ll ans = 0;
	
	vector<int> p1, p2;
	for (int i = 0; i < N; i++) {
		
		if (i%2 == 0) p1.push_back(V[i]);
		else p2.push_back(V[i]);
		
	}
	
	ans = merge_sort(p1.size(), p1) + merge_sort(p2.size(), p2);
	return ans;
}

#ifndef EVAL
int main() {
	
	int n; cin >> n;
	
	int v[100];
	for (int i = 0; i < n; i++) cin >> v[i];
	
	cout << paletta_sort(n, v) << "\n";
	return 0;
}
#endif