#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 1, mod = 1e8 - 3;
int n, mp[MAXN], c[MAXN], d[MAXN], ans = 0;
struct node {
int x, i;
} a[MAXN], b[MAXN];
bool cmp(const node &x, const node &y) {
return x.x < y.x;
}
void MergeSort(int l, int r) {
if (l == r)
return;
int mid = (l + r) / 2;
MergeSort(l, mid), MergeSort(mid + 1, r);
for (int i = l, j = mid + 1, pos = l; pos <= r; pos++) {
if (i == mid + 1)
c[pos] = d[j++];
else if (j == r + 1) {
c[pos] = d[i++];
ans += j - mid - 1, ans %= mod;
} else if (d[i] <= d[j]) {
c[pos] = d[i++];
ans += j - mid - 1, ans %= mod;
} else
c[pos] = d[j++];
}
for (int i = l; i <= r; i++)
d[i] = c[i];
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i].x), a[i].i = i;
for (int i = 1; i <= n; i++)
scanf("%d", &b[i].x), b[i].i = i;
sort(a + 1, a + n + 1, cmp), sort(b + 1, b + n + 1, cmp);
for (int i = 1; i <= n; i++)
c[i] = a[i].i, d[i] = b[i].i;
for (int i = 1; i <= n; i++)
mp[c[i]] = i;
for (int i = 1; i <= n; i++)
d[i] = mp[d[i]];
MergeSort(1, n);
printf("%d\n", ans % mod);
return 0;
}