#include<iostream>
#include<cstdio>
#include<algorithm>
#include<fstream>
#define N 1000010
#define mod 99999997
#define int long long
using namespace std;
int n,c[N],ansh,num;
struct st{
int a,b;
}a[N];
struct st2{
int val,id;
}b[N];
bool cmp(st2 a,st2 b){
if (a.val==b.val)return a.id<b.id;
return a.val<b.val;
}
bool cmp2(st a,st b){
return a.a<b.a;
}
int lowbit(int x){return x&(-x);}
void update(int x,int y){
for (int i=x;i<=n;i+=lowbit(i))c[i]=(c[i]+y)%mod;
}
int query(int x){
int ans=0;
for (int i=x;i>=1;i-=lowbit(i))ans=(ans+c[i])%mod;
return ans;
}
signed main()
{
scanf("%lld",&n);
for (int i=1;i<=n;i++){
scanf("%lld",&a[i].a);
b[i].val=a[i].a;
b[i].id=i;
}
sort(b+1,b+1+n,cmp);
for (int i=1;i<=n;i++){
a[b[i].id].a=i;
}
for (int i=1;i<=n;i++){
scanf("%lld",&a[i].b);
b[i].val=a[i].b;
b[i].id=i;
}
sort(b+1,b+1+n,cmp);
for (int i=1;i<=n;i++){
a[b[i].id].b=i;
}
sort(a+1,a+1+n,cmp2);
for (int i=1;i<=n;i++){
ansh=(ansh+i-1ll-query(a[i].b))%mod;
update(a[i].b,1);
}
printf("%lld\n",ansh);
return 0;
}