#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <unordered_map>
#include <functional>
#include <utility>
#include <tuple>
#include <cctype>
#include <bitset>
#include <complex>
#include <cmath>
#include <array>
#include <numeric>
using namespace std;
#define INF 0x3f3f3f3f
#define INFLL 0x3f3f3f3f3f3f3f3fLL
//#define MOD 998244353
#define MOD 1000000007
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define eb emplace_back
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pint;
typedef pair<ll,ll> pll;
typedef tuple<int,int,int> tint;
typedef vector<int> vint;
typedef vector<ll> vll;
typedef vector<ull> vull;
typedef vector<pint> vpint;
int dx[8]={0,0,-1,1,1,1,-1,-1};
int dy[8]={-1,1,0,0,1,-1,1,-1};
const int SIZE=100050;
//↑templete
int bitcount32(int dw32){
	dw32 = ((dw32 & 0xAAAAAAAA) >>  1) + (dw32 & 0x55555555);
	dw32 = ((dw32 & 0xCCCCCCCC) >>  2) + (dw32 & 0x33333333);
	dw32 = ((dw32 & 0xF0F0F0F0) >>  4) + (dw32 & 0x0F0F0F0F);
	dw32 = ((dw32 & 0xFF00FF00) >>  8) + (dw32 & 0x00FF00FF);
	dw32 = ((dw32 & 0xFFFF0000) >> 16) + (dw32 & 0x0000FFFF);
	return dw32;
}
//↓Binary Indexed Tree
struct BIT{
private:
	int n;
	vector<int> node;
public:
	//N要素のBITを作り、すべて0で初期化する
	//1-indexedであることに注意！！
	BIT(int N){
		node.resize(N+1,0);
		n=N;
	}
	//ノードiまでの和を計算する
	int sum(int i){
		if(!i)
			return 0;
		return node[i]+sum(i-(i&-i));
	}
	//ノードiにxを足す
	void add(int i,int x){
		if(i>n)
			return;
		node[i]+=x;
		add(i+(i&-i),x);
	}
};
//↑Binary Indexed Tree
//↓座標圧縮：vectorを入れると対応関係をmap[旧座標]=新座標で返す
map<int,int> comp(vector<int> v){
	map<int,int> pam;
	int sz=v.size();
	for(int i=0;i<sz;i++){
		pam[v[i]]=0;
	}
	//新座標が1からほしいときはnc=1にする
	int nc=0;
	for(pair<int,int> i:pam){
		pam[i.first]=nc;
		nc++;
	}
	return pam;
}
//↑座標圧縮
signed main(){

	int N;
	cin>>N;
	vint A, B;
	for(int i=0;i<N;i++){
		int a;
		cin>>a;
		A.pb(a);
	}
	for(int i=0;i<N;i++){
		int b;
		cin>>b;
		B.pb(b);
	}
	int ans=INF;

	for(int state=0;state<(1<<N);state++){	//1-indexedで奇数番目にするカードは1
		//cout<<state<<endl;
		if(bitcount32(state)!=(N+1)/2)
			continue;

		//数列を作る
		vpint O, E, sta;
		for(int i=0;i<N;i++){
			if(((state>>i)&1)==0){
				E.eb(i%2?A[i]:B[i], i);
				sta.eb(i%2?A[i]:B[i], i);
			}
			else{
				O.eb(i%2?B[i]:A[i], i);
				sta.eb(i%2?B[i]:A[i], i);
			}
		}
		sort(O.begin(), O.end());
		sort(E.begin(), E.end());
		vpint gorl;
		for(int i=0;i<O.size();i++){
			gorl.pb(O[i]);
			if(E.size()>i)
				gorl.pb(E[i]);
		}

		//gorlがsortedじゃない場合、skip
		bool is_sorted=1;
		for(int i=1;i<gorl.size();i++)
			if(gorl[i].first<gorl[i-1].first)
				is_sorted=0;
		if(!is_sorted)
			continue;

		map<pint, int> tes;
		int now=1;
		vint C;
		for(int i=0;i<N;i++){
			tes[gorl[i]]=now;
			now++;
		}
		for(int i=0;i<N;i++)
			C.pb(tes[sta[i]]);

		BIT bi(1250);
		int temp=0;
		for(int i=0;i<N;i++){
			temp+=bi.sum(1250)-bi.sum(C[i]);
			bi.add(C[i], 1);
		}
		ans=min(ans, temp);
	}
	if(ans==INF)
		cout<<-1<<endl;
	else
		cout<<ans<<endl;

	return 0;
}

Measured memory_bytes: 256