#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;
}