Compute's Wallpaper
题号:NC221062
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

Compute 买了台新电脑,他的初始壁纸是自带的风景壁纸,但他更喜欢小姐姐。

现在 CSL 连续 n 天每天给 Compute 一张小姐姐照片,第 i 张的小姐姐对 Compute 有 a_i 的吸引力。Compute 可以选择在这天换上 CSL 当天发给他的壁纸,并至少连续使用 a_i 天。

但我们都知道,每张壁纸的吸引力都会日益衰减,具体来说,当前壁纸每天对他的吸引力都会衰减 1。当衰减到 0 之后,Compute 就有可能换掉它,或者也有可能在之后的某天才换掉它,甚至不换一直用下去。

比如说,在第 1 天,CSL 发了一张吸引力为 2 的小姐姐壁纸给他并且他使用了这张壁纸;那么第 2 天,这张壁纸的吸引力就会减为 1 ,他肯定不会更换壁纸;但到了第 3 天,这张壁纸的吸引力减为 0,他可以选择更换为另一个壁纸或继续使用原来那张壁纸。

Compute 想知道,这 n 天他的桌面壁纸至少出现过两张不同的小姐姐的方案有多少种。

由于这个数可能很大,你只需要输出它对 取余后的结果即可。

输入描述:

第一行有一个整数 n ,表示 CSL 给 Compute 发壁纸的天数。

第二行有 n 个整数 ,分别表示第 i 天 CSL 给 Compute 发的小姐姐壁纸的吸引力为 a_i

输出描述:

在一行输出一个正整数,表示 Compute 桌面壁纸至少出现过两张不同的小姐姐的方案数对  取余后的结果。
示例1

输入

复制
3
1 2 3

输出

复制
2

说明

对于第一个样例,Compute 有两种更换壁纸的方案:第 1 天和第 2 天换壁纸;第 1 天和第 3 天换壁纸。
示例2

输入

复制
6
1 1 4 5 1 4

输出

复制
17
示例3

输入

复制
7
1 9 1 9 8 1 0

输出

复制
18
示例4

输入

复制
9
8 2 0 2 3 3 0 1 6

输出

复制
64
示例5

输入

复制
30
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

输出

复制
73741786

备注:

Compute 可以在 CSL 发完壁纸的 n 天后继续使用他所正在使用最后的一张壁纸。