#include <algorithm>
#include <cstdio>
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
const int N = 1919810;
const long long MOD = 99999997;
int n;
vector<pair<int, int>> one;
vector<pair<int, int>> two;
int nums[N];
long long tree[N];
long long res;
int lowbit (int id) {
return (id) & (-id);
}
void add (int id, long long num) {
for (; id <= n; id += lowbit (id)) {
tree[id] = (tree[id] + num) % MOD;
}
}
long long query (int id) {
long long ans = 0;
for (; id; id -= lowbit (id)) {
ans = (ans + tree[id]) % MOD;
}
return ans;
}
int main () {
freopen ("MatchNOIP2013.in", "r", stdin);
freopen ("MatchNOIP2013.out", "w", stdout);
cin >> n;
int num;
for (int i = 1; i <= n; i++) {
cin >> num;
one.emplace_back(num, i);
}
for (int i = 1; i <= n; i++) {
cin >> num;
two.emplace_back(num, i);
}
sort (one.begin(), one.end());
sort (two.begin(), two.end());
for (int i = 0; i < one.size(); i++) {
nums[one[i].second] = two[i].second;
}
for (int i = 1; i <= n; i++) {
res = (res + ((query (n) - query (nums[i])) % MOD + MOD) % MOD) % MOD;
add (nums[i], 1);
}
cout << res << endl;
return 0;
}