func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename A, typename B>   ostream& operator<<(ostream& o, pair<A, B> a) {     return o << a.first <<     << a.second;   }   template <typename A, typename B>   istream& operator>>(istream& o, pair<A, B>& a) {     return o >> a.first >> a.second;   }   const int mod = 1e9 + 7, abc = 864197532, N = 300087, K = 111;   long long int modpow(long long int a, int b) {     long long int ans = 1;     for (; b; b >>= 1, a = a * a % mod) {       if (b & 1) ans = ans * a % mod;     }     return ans;   }   int inter(vector<int> l, vector<int> r) {     int ll = *max_element(l.begin(), l.end()),         rr = *min_element(r.begin(), r.end());     if (ll <= rr) return rr - ll + 1;     return 0;   }   void add(long long int& a, long long int b) {     a += b;     if (a >= mod) a -= mod;   }   void del(long long int& a, long long int b) {     a -= b;     if (a < 0) a += mod;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     int n;     cin >> n;     vector<int> l(n), r(n), sz(n), inv(n);     for (int i = 0; i < n; ++i) cin >> l[i];     long long int al = 1;     for (int i = 0; i < n; ++i) {       cin >> r[i];       sz[i] = r[i] - l[i] + 1;       al = al * sz[i] % mod;       inv[i] = modpow(sz[i], mod - 2);     }     long long int square = 0, sum = 0;     for (int i = 0; i + 1 < n; ++i) {       add(sum, inter({l[i], l[i + 1]}, {r[i], r[i + 1]}) * al % mod * inv[i] %                    mod * inv[i + 1] % mod);     }     square = sum;     for (int i = 0; i + 2 < n; ++i) {       add(square, inter({l[i], l[i + 1], l[i + 2]}, {r[i], r[i + 1], r[i + 2]}) *                       al % mod * inv[i] % mod * inv[i + 1] % mod * inv[i + 2] %                       mod * 2 % mod);     }     long long int now = 0;     for (int i = 0; i + 1 < n; ++i)       add(now, 1ll * inter({l[i], l[i + 1]}, {r[i], r[i + 1]}) * inv[i] % mod *                    inv[i + 1] % mod);     for (int i = 0; i + 1 < n; ++i) {       if (i - 1 >= 0)         del(now, 1ll * inter({l[i - 1], l[i]}, {r[i - 1], r[i]}) * inv[i - 1] %                      mod * inv[i] % mod);       del(now, 1ll * inter({l[i], l[i + 1]}, {r[i], r[i + 1]}) * inv[i] % mod *                    inv[i + 1] % mod);       if (i + 2 < n)         del(now, 1ll * inter({l[i + 1], l[i + 2]}, {r[i + 1], r[i + 2]}) *                      inv[i + 1] % mod * inv[i + 2] % mod);       add(square, now * inter({l[i], l[i + 1]}, {r[i], r[i + 1]}) % mod * inv[i] %                       mod * inv[i + 1] % mod * al % mod);       if (i - 1 >= 0)         add(now, 1ll * inter({l[i - 1], l[i]}, {r[i - 1], r[i]}) * inv[i - 1] %                      mod * inv[i] % mod);       add(now, 1ll * inter({l[i], l[i + 1]}, {r[i], r[i + 1]}) * inv[i] % mod *                    inv[i + 1] % mod);       if (i + 2 < n)         add(now, 1ll * inter({l[i + 1], l[i + 2]}, {r[i + 1], r[i + 2]}) *                      inv[i + 1] % mod * inv[i + 2] % mod);     }     cout << ((square + mod - sum * n * 2 % mod) * modpow(al, mod - 2) +              1ll * n * n) %                 mod;   }   