Problem:
Score : 700 points

Problem Statement

We have N cards numbered 1, 2, ..., N.
Card i (1 \leq i \leq N) has an integer A_i written in red ink on one side and an integer B_i written in blue ink on the other side.
Initially, these cards are arranged from left to right in the order from Card 1 to Card N, with the red numbers facing up.

Determine whether it is possible to have a non-decreasing sequence facing up from left to right (that is, for each i (1 \leq i \leq N - 1), the integer facing up on the (i+1)-th card from the left is not less than the integer facing up on the i-th card from the left) by repeating the operation below. If the answer is yes, find the minimum number of operations required to achieve it.

Choose an integer i (1 \leq i \leq N - 1).
Swap the i-th and (i+1)-th cards from the left, then flip these two cards.

Constraints

1 \leq N \leq 18

1 \leq A_i, B_i \leq 50 (1 \leq i \leq N)

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N
B_1 B_2 ... B_N

Output

If it is impossible to have a non-decreasing sequence, print -1.
If it is possible, print the minimum number of operations required to achieve it.

Sample Input 1

3
3 4 3
3 2 3

Sample Output 1

1

By doing the operation once with i = 1, we have a sequence [2, 3, 3] facing up, which is non-decreasing.

Sample Input 2

2
2 1
1 2

Sample Output 2

-1

After any number of operations, we have the sequence [2, 1] facing up, which is not non-decreasing.

Sample Input 3

4
1 2 3 4
5 6 7 8

Sample Output 3

0

No operation may be required.

Sample Input 4

5
28 15 22 43 31
20 22 43 33 32

Sample Output 4

-1

Sample Input 5

5
4 46 6 38 43
33 15 18 27 37

Sample Output 5

3

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define MAX_INF 0x7f
#define MAX_INF_VAL 0x7f7f7f7f
#define pi 3.141592653589
#define eps 1e-10
//#define p 2173412051LL
#define sz 2

using namespace std;

int a[ 19 ][ 2 ];
int b[ 19 ][ 2 ];
int c[ 19 ], d[ 19 ];

int main() {
	bool ok;
	int n, ans = 99999999;
	int m, x, tmp, t1, t2;
	int n1, n2;
	scanf( "%d", &n );
	n2 = n >> 1;
	n1 = n - n2;
	m = 1 << ( n - 1 );
	for( int i = 1; i <= n; ++i )
		scanf( "%d", &a[ i ][ 0 ] );
	for( int i = 1; i <= n; ++i )
		scanf( "%d", &a[ i ][ 1 ] );
	for( int i = 0; i < m; ++i ) {
		x = i;
		t1 = t2 = tmp = 0;
		ok = true;
		for( int j = 1; j <= n; ++j )
			for( int k = 0; k < 2; ++k )
				b[ j ][ k ] = a[ j ][ k ];
		for( int j = 1; j < n; ++j ) {
			if( x & 1 ) {
				swap( b[ j ][ 0 ], b[ j + 1 ][ 1 ] );
				swap( b[ j + 1 ][ 0 ], b[ j ][ 1 ] );
				++tmp;
			}
			x >>= 1;
		}
		for( int j = 1, k = 0; j <= n; j += 2, ++k )
			c[ k ] = b[ j ][ 0 ];
		for( int j = 2, k = 0; j <= n; j += 2, ++k )
			d[ k ] = b[ j ][ 0 ];
		for( int j = 0; j < n1; ++j )
			for( int k = j + 1; k < n1; ++k )
				if( c[ j ] > c[ k ] )
					++t1;
		for( int j = 0; j < n2; ++j )
			for( int k = j + 1; k < n2; ++k )
				if( d[ j ] > d[ k ] )
					++t2;
		tmp += ( t1 + t2 ) * 3;
		for( int j = 1, k = 0; j <= n; j += 2, ++k )
			b[ j ][ 0 ] = c[ k ];
		for( int j = 2, k = 0; j <= n; j += 2, ++k )
			b[ j ][ 0 ] = d[ k ];
		for( int j = 2; j <= n; ++j )
			if( b[ j ][ 0 ] < b[ j - 1 ][ 0 ] ) {
				ok = false;
				break;
			}
		if( ok )
			ans = min( ans, tmp );
	}
	if( ans == 99999999 )
		ans = -1;
	printf( "%d", ans );
	return 0;
}