#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 1;
const int mod = 1e8 - 3;
pair<int, int> a[maxn], b[maxn];
int pos[maxn];
int tmp[maxn];
int c[maxn];
long long ans = 0;
void solve(int l, int r)
{
if (l == r)
return;
else
{
int mid = (l + r) >> 1;
solve(l, mid);
solve(mid + 1, r);
for (int i = l, j = mid + 1, k = l; k <= r; ++k)
{
if ((j > r) || (i <= mid && c[i] <= c[j]))
{
tmp[k] = c[i++];
}
else
{
ans += mid - i + 1;
tmp[k] = c[j++];
}
}
for (int i = l; i <= r; ++i)
c[i] = tmp[i];
}
}
int main()
{
int t;
cin >> t;
for (int i = 1; i <= t; ++i)
{
cin >> a[i].first, a[i].second = i;
}
for (int i = 1; i <= t; ++i)
{
cin >> b[i].first, b[i].second = i;
}
sort(a + 1, a + 1 + t);
sort(b + 1, b + 1 + t);
// for (int i = 1; i <= t; ++i)
// {
// int val = a[i].second;
// pos[val] = i;
// }
// for (int i = 1; i <= t; ++i)
// {
// int val = b[i].second;
// c[i] = pos[val];
// }
//这里我是按照最长公共子序列的那个做法去映射的,根据第一篇题解正确的映射应该是下面的做法,但不知道为什么,求助
for (int i = 1; i <= t; ++i)
{
int t1 = b[i].second;
int t2 = a[i].second;
c[t1] = t2;
}
// for (int i = 1; i <= t; ++i)
// cout << c[i] << ' ';
// cout << '\n';
solve(1, t);
cout << ans % mod << endl;
return 0;
}