#include using namespace std; using pii = pair; using ll = long long; const int N = 2000010, MOD = 1e9 + 7, INF = 0x3f3f3f3f; int n, m, w[N]; ll qmi(ll a, ll b, ll c) { ll res = 1; while (b) { if (b & 1) res = res * a % c; a = a * a % c; b >>= 1; } return res; } pii a[N]; void solve() { scanf("%d", &n); for (int i = 1; i < n + 1; i++) scanf("%d", &a[i].first); for (int i = 1; i < n + 1; i++) scanf("%d", &a[i].second); vector v; for (int i = 1; i < n + 1; i++) if (a[i].first > 0) v.push_back(a[i]); else v.push_back({-a[i].first, -a[i].second}); if (!v.size()) { puts("0"); return; } n = v.size(); for (int i = 1; i < n + 1; i++) a[i] = v[i - 1]; sort(a + 1, a + n + 1, [&](const pii& a, const pii& b) { return (double)a.second / a.first < (double)b.second / b.first; }); ll rx = 0, ry = 0, res = 0; long double t = 1e30; for (int i = 1; i < n + 1; i++) rx += a[i].first, ry += a[i].second; for (int i = 1; i < n + 1; i++) { rx -= a[i].first << 1, ry -= a[i].second << 1; long double p = (long double)a[i].second / a[i].first, v = ry - rx * p; if (v < t) { t = v; res = (ll)(a[i].second + MOD) % MOD * qmi((MOD + a[i].first) % MOD, MOD - 2, MOD) % MOD; }; } printf("%lld\n", res); } int main() { int T = 1; // scanf("%d", &T); while (T--) solve(); return 0; }