#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int main() {
int n;
cin >> n;
vector<long long> a(n), b(n);
for (int i = 0; i < n; ++i) cin >> a[i];
for (int i = 0; i < n; ++i) cin >> b[i];
sort(a.begin(), a.end());
sort(b.begin(), b.end());
// 预计算 2^k
vector<long long> p2(n + 1, 1);
for (int i = 1; i <= n; ++i) p2[i] = (p2[i-1] * 2) % MOD;
long long ans = 0;
for (int j = 0; j < n; ++j) {
int cnt = upper_bound(a.begin(), a.end(), b[j]) - a.begin(); // a 中 ≤ b[j] 的个数
if (cnt == 0) continue; // A 必须非空
long long waysA = (p2[cnt] - 1 + MOD) % MOD; // 非空
long long waysB = p2[n - j - 1]; // 选定最小值为 b[j]
ans = (ans + waysA * waysB) % MOD;
}
cout << ans % MOD << '\n';
return 0;
}