program paletta;
var i,z, dimpari, dimdispari:Longint;
pari, dispari, controllo: array of longint;
n_ribaltamenti, piccolidopo:int64;
ordinabile: boolean;
N : Longint;
V : array of Longint;
numero_ribaltamenti : Int64;
{ iterators used in for loops }
i0: Longint;
function SOMMA(X:longint):int64;
begin
SOMMA:=0;
while (X >= 0) do
begin
SOMMA:=SOMMA+controllo[X];
X := (X and (X+1)) -1;
end
end;
Procedure modifica(X:longint; D:longint);
begin
while (X <D) do
begin
controllo[X]:=controllo[X]+1;
X := X or (X+1);
end
end;
function paletta_sort(N: longint; V: array of longint): int64;
begin
if N mod 2 = 0 then begin dimpari:=N div 2; dimdispari:= dimpari; end
else begin dimdispari:=N div 2 ; dimpari:= dimdispari+1; end;
Setlength(pari, dimpari+1);
Setlength(dispari, dimdispari+1);
Setlength(controllo, N+1);
for i:=0 to N-1 do if i mod 2 =0 then pari[i div 2 ]:=V[i] div 2;
for i:=0 to N-1 do if i mod 2 <> 0 then dispari[i div 2 ]:=(V[i] -1) div 2 ;
ordinabile:=true;
for z:=0 to N-1 do if V[z] mod 2 <> z mod 2 then begin ordinabile:=false; n_ribaltamenti:=-1; end;
if ordinabile=true then begin
for i:=0 to dimpari do controllo[i]:=0;
n_ribaltamenti:=0; piccolidopo:=0;
for i:=dimpari -1 downto 0 do
begin
piccolidopo:=piccolidopo+somma(Pari[i]);
modifica (pari[i], dimpari);
end;
n_ribaltamenti:=n_ribaltamenti+piccolidopo;
for i:=0 to dimdispari do controllo[i]:=0;
piccolidopo:=0;
for i:=dimdispari-1 downto 0 do
begin
piccolidopo:=piccolidopo+somma(Dispari[i]);
modifica (dispari[i], dimdispari);
end;
n_ribaltamenti:=n_ribaltamenti+piccolidopo;
end;
paletta_sort:=n_ribaltamenti;
end;
begin
{ Reading input }
read(N);
Setlength(V, N);
for i0 := 0 to N-1 do
begin
read(V[i0]);
end;
{ Calling functions }
numero_ribaltamenti := paletta_sort(N, V);
{ Writing output }
writeln(numero_ribaltamenti);
end.