跳跃
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小李最近在玩一款游戏《Jump!》,在这个游戏中有 n 个格子,一开始玩家在第一个格子,玩家需要在每个格子上不断跳跃,同时拾取更多的金币。

详细规则如下:每个格子有 三个属性,在玩家跳跃到第i个格子时,玩家获得a_i个金币,同时在中挑选一个整数 x,如果 大于 n,游戏结束;否则玩家跳跃到第 个格子,游戏继续。

小李想,或许可以通过合理的跳跃策略来获得最多的金币,但他太菜了,想不到怎么去选择。于是在每个格子上,小李都**等概率的**从中随机选取一个整数X来进行跳跃。他想知道,最后他获得的的总金币数期望是多少?

输入描述:

第一行输入 ,表示格子数。

第二行输入 n 个整数 ,表示跳到这个点上可以获得的金币数。

第三行输入 n 个整数 ,表示从这个点起跳最小的跳跃距离。

第四行输入 n 个整数 ,表示从这个点起跳最大的跳跃距离。

输出描述:

输出一个整数E,表示小李最后获得的金币数期望。
示例1

输入

复制
2
4 8
1 1
1 2

输出

复制
12
示例2

输入

复制
3
8 4 8
1 1 1
3 2 1

输出

复制
332748131

备注:

我们可以证明最后的期望总是有限有理数。此外,在问题约束下,当该值E,我们总可以找到一个唯一的整数R,使得,请输出这个R