#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e4 + 2, Nmax = 5e5 + 1, mod = 1e9 + 7;
struct str {
    int a, b;
} v[Nmax];
int dps[nmax][nmax * 2];
int dpp[2][nmax * 2];
int sp[nmax * 2];
int bk[nmax * 2];
int p2[Nmax];
int vmax;
void add(int &a, int b) {
    a += b;
    if (a >= mod) {
        a -= mod;
    }
}
void norm(int n) {
    map<int, int> N;
    for (int i = 1; i <= n; i++) {
        N[v[i].a];
        N[v[i].b];
    }
    for (auto &[a, b] : N) {
        b = ++vmax;
        bk[vmax] = a;
    }
    for (int i = 1; i <= n; i++) {
        v[i].a = N[v[i].a];
        v[i].b = N[v[i].b];
    }
}
void pre2() {
    p2[0] = 1;
    for (int i = 1; i < nmax; i++) {
        p2[i] = p2[i - 1];
        add(p2[i], p2[i - 1]);
    }
}
int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> v[i].a;
    }
    for (int i = 1; i <= n; i++) {
        cin >> v[i].b;
    }
    int ans = 0;
    if (n > vmax) {
        pre2();
        for (int i = 2; i < n; i++) {
            add(ans, (1ll * (p2[i - 1] - 1) * (p2[n - i] - 1)) % mod);
        }
        cout << ans;
        return 0;
    }
    norm(n);
    dps[n][v[n].a] = 1;
    dps[n][v[n].b] = 1;
    for (int i = n - 1; i >= 1; i--) {
        for (int val = 1; val <= v[i].a; val++) {
            add(dps[i][v[i].a], dps[i + 1][val]);
        }
        for (int val = v[i].a + 1; val <= vmax; val++) {
            add(dps[i][val], dps[i + 1][val]);
        }
        for (int val = 1; val <= v[i].b; val++) {
            add(dps[i][v[i].b], dps[i + 1][val]);
        }
        for (int val = v[i].b + 1; val <= vmax; val++) {
            add(dps[i][val], dps[i + 1][val]);
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = vmax; j >= 1; j--) {
            add(dps[i][j], dps[i][j + 1]);
        }
    }
    dpp[1][v[1].a] = 1;
    dpp[1][v[1].b] = 1;
    for (int i = 2; i <= n; i++) {
        sp[vmax + 1] = 0;
        for (int val = vmax; val >= 1; val--) {
            sp[val] = sp[val + 1];
            add(sp[val], dpp[(i - 1) & 1][val]);
            dpp[i & 1][val] = 0;
        }
        // set v[i].a
        for (int val = v[i].a + 1; val <= vmax; val++) {
            add(ans, (1ll * ((1ll * (bk[val] - bk[v[i].a]) * dpp[(i - 1) & 1][val]) % mod) * dps[i + 1][val]) % mod);
            add(ans, (1ll * ((1ll * (bk[val] - bk[v[i].a]) * sp[val]) % mod) * ((dps[i + 1][val] - dps[i + 1][val + 1] + mod) % mod)) % mod);
            add(ans, (mod - ((1ll * ((1ll * (bk[val] - bk[v[i].a]) * dpp[(i - 1) & 1][val]) % mod) * ((dps[i + 1][val] - dps[i + 1][val + 1] + mod) % mod)) % mod)));
        }
        // set v[i].b
        for (int val = v[i].b + 1; val <= vmax; val++) {
            add(ans, (1ll * ((1ll * (bk[val] - bk[v[i].b]) * dpp[(i - 1) & 1][val]) % mod) * dps[i + 1][val]) % mod);
            add(ans, (1ll * ((1ll * (bk[val] - bk[v[i].b]) * sp[val]) % mod) * ((dps[i + 1][val] - dps[i + 1][val + 1] + mod) % mod)) % mod);
            add(ans, (mod - ((1ll * ((1ll * (bk[val] - bk[v[i].b]) * dpp[(i - 1) & 1][val]) % mod) * ((dps[i + 1][val] - dps[i + 1][val + 1] + mod) % mod)) % mod)));
        }
        for (int val = v[i].a + 1; val <= vmax; val++) {
            add(dpp[i & 1][val], dpp[(i - 1) & 1][val]);
        }
        for (int val = 1; val <= v[i].a; val++) {
            add(dpp[i & 1][v[i].a], dpp[(i - 1) & 1][val]);
        }
        for (int val = v[i].b + 1; val <= vmax; val++) {
            add(dpp[i & 1][val], dpp[(i - 1) & 1][val]);
        }
        for (int val = 1; val <= v[i].b; val++) {
            add(dpp[i & 1][v[i].b], dpp[(i - 1) & 1][val]);
        }
    }
    cout << ans;
    return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |