//#include "testlib.h" //#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int mod = 1e9+7; int n; int s1[511111], s2[511111], a[511111], b[511111], st[511111], L[511111], ss[511111]; void upd(int *s, int x, int l, int r) { if (l > r) swap(l, r); // for(int i = 1; i <= l+r+1; ++i) // s[i] = (s[i] + x * 1ll * min(i, min(l+1, l+r-i+2))) % mod; // return; for(int i = 1; i <= l; ++i) { s[i] = (s[i] + i * 1ll * x) % mod; s[l+r+2-i] = (s[l+r+2-i] + i * 1ll * x) % mod; } //for(int i = l+1; i < r+2; ++i) // s[i] = (s[i] + (l+1) * 1ll * x) % mod; ss[l+1] = (ss[l+1] + (l+1) * 1ll * x) % mod; ss[r+2] = (ss[r+2] + (mod - (((l+1) * 1ll * x)%mod))) % mod; } void get(int *s, int *a) { memset(ss, 0, sizeof ss); int top = -1; for(int i = 0; i < n; ++i) { while (top >= 0 && a[st[top]] <= a[i]) top--; if (top == -1) L[i] = i+1; else L[i] = i - st[top]; st[++top] = i; } top = -1; for(int i = n-1; i >= 0; --i) { while (top >= 0 && a[st[top]] < a[i]) top--; int R = n; if (top >= 0) R = st[top]; st[++top] = i; upd(s, a[i], L[i]-1, R-i-1); } for(int i = 1; i <= n; ++i) { ss[i] = (ss[i-1] + ss[i]) % mod; s[i] = (s[i] + ss[i]) % mod; } } int main() { ios::sync_with_stdio(0); //freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); cin >> n; for(int i = 0; i < n; ++i) { cin >> a[i]; a[i] += i+1;// a[i] %= mod; } for(int i = 0; i < n; ++i) { cin >> b[i]; b[i] += i+1; //b[i] %= mod; } get(s1, a); get(s2, b); for(int i = 1; i <= n; ++i) cout << (s1[i] * 1ll * s2[i]) % mod << " \n"[i==n]; return 0; }