#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
#define Ma7moud_7amdy \
ios_base::sync_with_stdio(false); \
cin.tie(NULL); \
cout.tie(NULL);
#define endl "\n"
void openSesame() {
#ifndef ONLINE_JUDGE
freopen("standard.in", "r", stdin);
freopen("standard.out", "w", stdout);
#else
//freopen("eliminating.in", "r", stdin);
//freopen("standard.out", "w", stdout);
#endif
}
const int N = 2472171 + 5;
const int mod = 1e9 + 7;
ll fastPower(ll x, ll y) {
if (y == 0)return 1;
if (y == 1)return x;
ll ret = fastPower(x, y >> 1) % mod;
ret *= ret;
ret %= mod;
if (y & 1)ret *= x;
return ret % mod;
}
ll fact[N];
ll modInv[N];
void solve() {
int n;
cin >> n;
vector<int>p(n + 1), q(n + 1);
for (int i = 1; i <= n; ++i) {
cin >> p[i];
}
ll sum = 0;
int cnt = 0;
bool ok = 1;
for (int i = 1; i <= n; ++i) {
cin >> q[i];
if (q[i] < p[i] || (q[i] - p[i]) % i)ok = 0;
if (q[i] == p[i])continue;
sum += (q[i] - p[i]) / i;
}
if (!ok) {
cout << 0 << endl;
return;
}
fact[0] = fact[1] = 1;
for (int i = 2; i <= sum; ++i) {
fact[i] = fact[i - 1] * i;
fact[i] %= mod;
}
for (int i = 1; i <= sum; ++i) {
modInv[i] = fastPower(fact[i], mod - 2);
}
ll ans = fact[sum];
for (int i = 1; i <= n; ++i) {
if (q[i] == p[i])continue;
int cur = (q[i] - p[i]) / i;
ans *= modInv[cur];
ans %= mod;
}
cout << ans << endl;
}
int main() {
Ma7moud_7amdy;
openSesame();
int t = 1, id = 1;
//cin >> t;
while (t--) {
//cout << "Case #" << id++ << ": ";
solve();
}
}
Copy