#include using namespace std; #define rep(i,n) for(int i=0;i=0;--i) #define debug(output) if(debugFlag)cout<<#output<<"= "< P; const bool debugFlag=true; const lint linf=1.1e18;const int inf=1.01e9; constexpr int MOD=1000000007; templatebool chmax(T &a, const T &b) { if(a < b){ a = b; return 1; } return 0; } templatebool chmin(T &a, const T &b) { if(a > b){ a = b; return 1; } return 0; } #include using namespace atcoder; using mint = modint1000000007; bool compare(array x,array y){ auto [a1,b1]=x;auto [a2,b2]=y; return a2*(b1-1)-a1*(b2-1)>0; } signed main(){ int n;cin>>n; vector> a(n); rep(j,2)rep(i,n)cin>>a[i][j]; sort(a.begin(),a.end(),compare); mint res=0; mint p=1; rep(i,n){ auto [x,y]=a[i]; res+=p*x; p*=y; } cout<