#include<bits/stdc++.h>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
#define fi first
#define se second
#define fastio ios_base::sync_with_stdio(false); cin.tie(0)
#define loop(i, a, b) for(lli i=a; i<b; i++)
#define loopb(i, a, b) for(lli i=a; i>=b; i--)
#define pb push_back
#define umap unordered_map
typedef long long int lli;
typedef pair<lli, lli> pii;
typedef vector<lli> vll;
typedef tree<lli, null_type, less<lli>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
// use to avoid collision
struct custom_hash {
    static uint64_t splitmix64(uint64_t x) {
        // http://xorshift.di.unimi.it/splitmix64.c
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }

    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};
// for pair in unordered_map
struct hash_pair {
    static uint64_t splitmix64(uint64_t x) {
    // http://xorshift.di.unimi.it/splitmix64.c
    x += 0x9e3779b97f4a7c15;
    x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
    x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
    return x ^ (x >> 31);
	}
    template <class T1, class T2>
    size_t operator()(const pair<T1, T2>& p) const{
        auto hash1 = hash<T1>{}(p.first);
        auto hash2 = hash<T2>{}(p.second);
        uint64_t x = hash1 ^ hash2;
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};
lli M = 1e9 + 7;
lli power(lli x, lli y){
    lli res = 1;
    x = x ;
    while (y > 0) {
        if (y & 1)
            res = (res*x)%M ;
        y = y>>1;
        x = (x*x)%M;
    }
    return res%M;
}
//lli n;
//bool is_pos(vector<vll>& A, lli x, lli y, lli val){
//	loop(i, 0, n){
//		if(A[x][i] == val || A[y][i] == val || A[i][x] == val || A[i][y] == val)
//			return false;
//	}
//	return true;
//}
//bool calc(vector<vll>& A, lli x, lli y){
//	if(y == n){
//		x++;
//		if(x == n)
//			return true;
//		y = 0;
//	}
//	loop(i, 1, 2*n){
////		A[x][y] = i;
//		if(is_pos(A, x, y, i)){
//			A[x][y] = i;
//			if(calc(A, x, y+1))
//				return true;
//			A[x][y] = 0;
//			
//		}
//	}
//	return false;
//}
bool is_equal(vll& A, vll& B){
	loop(i, 0, A.size()){
		if(A[i] == B[i])
			continue;
		else
			return false;
	}
	return true;
}
lli solve(){
//	lli n;
//	cin>>n;
//	vector<string> S(n);
//	loop(i, 0, n)	cin>>S[i];
//	sort(S.begin(), S.end());
//	vector<vll> dp(2, vll(n, 0));
//	loop(i, 1, n){
////		cout<<S[i]<<" ";
//		lli p = 0, s = 0;
//		lli s1 = S[i].length();
//		lli s2 = S[i-1].length();
//		loop(j, 0, min(s1, s2)){
//			if(S[i][j] != S[i-1][j])
//				break;
//			p++;
//		}
//		lli j = s1-1, k = s2-1;
//		while(j >= 0 && k >= 0){
//			if(S[i][j] == S[i-1][k])
//				s++;
//			else
//				break;
//			j--;
//			k--;
//		}
//		dp[0][i] = max(dp[1][i-1], dp[0][i-1]);
//		dp[1][i] = dp[0][i-1] + min(s*s, p*p);
////		cout<<dp[0][i]<<" "<<dp[1][i]<<"\n";
//	}	
//	cout<<max(dp[0][n-1], dp[1][n-1])<<"\n";
//	return 0;


//	lli n;
//	cin>>n;
//	if(n == 1){
//		cout<<"Hooray\n";
//		cout<<1<<"\n";
//		return 0;
//	}
////	else if(n%2 == 1){
////		cout<<"Boo\n";
////		return 0;
////	}
//	vector<vll> A(n, vll(n, 0));
//	cout<<"Hooray\n";
//	lli a = 1;
//	loop(i, 0, n){
//		lli temp = a;
//		loop(j, i, n){
//			A[i][j] = temp%(2*n);
//			temp += 2;
////			cout<<A[i][j]<<" ";
//		}
////		cout<<"\n";
//		a += 4;
//	}
//	a = 2;
//	loop(i, 0, n){
//		lli temp = a;
//		loop(j, 0, i){
//			temp = temp%(2 * (n-1));
//			if(temp == 0)
//				temp = 2 * (n-1);
//			A[i][j] = temp;
//			temp += 2;
////			cout<<A[i][j]<<" ";
//		}
////		cout<<"\n";
//		if(i != 0)
//			a += 2;
//	}
//	loop(i, 0, n){
//		loop(j, 0, n)
//			cout<<A[i][j]<<"  ";
//		cout<<"\n";
//	}
//	return 0;


//	cin>>n;
//	vector<vll> A(n, vll(n, 0));
//	calc(A, 0, 0);
//	loop(i, 0, n){
//		loop(j, 0, n)
//			cout<<A[i][j]<<"  ";
//		cout<<"\n";
//	}
//	

	lli n;
	cin>>n;
	vll A(n), B(n);
	loop(i, 0, n)
		cin>>A[i];
	loop(i, 0, n)
		cin>>B[i];
	vll S(n, 0);
	loop(i, 0, n)
		S[i] = i+1;
	lli a = 0, b = 0;
	lli cnt = 0;
	lli ans = 0;
	do{
		if(is_equal(A, S))
			a = cnt;
		if(is_equal(B, S))
			b = cnt;
		cnt++;
	}while(next_permutation(S.begin(), S.end()));
	cout<<abs(a-b)<<"\n";
	return 0;
}
int main(){
//	fastio;
	lli t;
//	cin>>t;
	t = 1;
	while(t>0){
		t--;
		solve();
	}
}

Measured memory_bytes: 256