#pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include<bits/stdc++.h> #include<atcoder/all> using namespace std; using namespace atcoder; using ll=long long; void IO(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); } ll P(ll a,ll mod){ ll res=1; for(ll i=1;i<=a;i++){ res*=i; res%=mod; } return res; } int main(){ IO(); ll n; cin>>n; vector<ll> x(n); for(ll i=0;i<n;i++){ cin>>x[i]; } vector<ll> y(n); for(ll i=0;i<n;i++){ cin>>y[i]; } sort(x.begin(),x.end()); sort(y.rbegin(),y.rend()); ll left=n,right=n; for(ll i=0;i<n-1;i++){ if(x[i]<y[i]&&x[i+1]>y[i+1]){ left=i+1; right=n-left; break; } } ll mod=998244353; ll ans=1; if(left!=n&&right!=n){ ans*=P(left,mod); ans%=mod; ans*=P(right,mod); ans%=mod; }else{ ans*=P(left,mod); } cout<<ans<<endl; }