#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
#include<cstdlib>
#include<iomanip>
#include<map>
#define int long long
#define db long double
#define pii pair<int,int>
#define up(i,l,r) for(int i=(l);i<=(r);i++)
#define down(i,l,r) for(int i=(l);i>=(r);--i)
#define p_b push_back
#define m_p make_pair
using namespace std;
inline int lb(int x){return x&-x;}
int n;
int a[100007];
int b[100007];
int tmp1[100007];
int tmp2[100007];
int t[100007];
const int mod=1e8-3;
inline void upd(int x,int k){
while(x<=n){
t[x]+=k;
x+=lb(x);
}
}
inline int qry(int x){
int s=0;
while(x){
s+=t[x];
x-=lb(x);
}
return s;
}
struct node{
int pra;
int prb;
}pk[100007];
bool cmp1(node x,node y){
return x.pra<y.pra;
}
bool cmp2(node x,node y){
return x.prb<y.prb;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)cin>>b[i];
for(int i=1;i<=n;i++)tmp1[i]=a[i];
sort(tmp1+1,tmp1+n+1);
int l=unique(tmp1+1,tmp1+n+1)-tmp1-1;
for(int i=1;i<=n;i++){
a[i]=lower_bound(tmp1+1,tmp1+l+1,a[i])-tmp1;
}
for(int i=1;i<=n;i++)tmp2[i]=b[i];
sort(tmp2+1,tmp2+n+1);
l=unique(tmp2+1,tmp2+n+1)-tmp2-1;
for(int i=1;i<=n;i++){
b[i]=lower_bound(tmp2+1,tmp2+l+1,b[i])-tmp2;
}
for(int i=1;i<=n;i++){
pk[i].pra=a[i];
pk[i].prb=b[i];
}
stable_sort(pk+1,pk+n+1,cmp2);
int ans=0;
for(int i=n;i>=1;i--){
ans=(ans+qry(pk[i].pra-1))%mod;
upd(pk[i].pra,1);
}
cout<<ans%mod<<endl;
return 0;
}