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

typedef long long ll;

int n;
vector<int> d;

vector<int> bit;

void upd(int i, int v) {
	for (; i < n; i += (i+1) & (-i-1)) {
		bit[i] += v;
	}
}

int query(int i) {
	int res = 0;
	for (; i >= 0; i -= (i+1) & (-i-1)) {
		res += bit[i];
	}
	return res;
}

int main() {
	ios::sync_with_stdio(0), cin.tie(0);
	cin >> n;
	d.resize(n);
	for (int i = 0; i < n; i++) {
		cin >> d[i];
		d[i]--;
	}
	vector<int> p(n);
	set<int> zz;
	for (int i = 0; i < n; i++) zz.insert(i);
	for (int i = n-1; i >= 0; i--) {
		set<int>::iterator it = zz.upper_bound(d[i]);
		if (it == zz.begin()) {
			cout << -1 << '\n';
			exit(0);
		}
		--it;
		p[i] = *it;
		zz.erase(it);
	}
	bit.resize(n);
	ll tot = 0;
	for (int i = 0; i < n; i++) {
		tot += i - query(p[i]);
		upd(p[i], 1);
	}
	cout << tot << '\n';
}
