美丽序列
题号:NC21313
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

牛牛喜欢整数序列,他认为一个序列美丽的定义是
1:每个数都在0到40之间
2:每个数都小于等于之前的数的平均值
具体地说:for each i, 1 <= i < N,  A[i] <= (A[0] + A[1] + ... + A[i-1]) / i.
3:没有三个连续的递减的数

现在给你一个序列,每个元素是-1到40,你可以将序列中的-1修改成任意的数,求你可以得到多少个美丽序列,答案对1e9+7取模

输入描述:

第一行输入一个整数n (1 ≤ n ≤ 40)

第二行输入n个整数

输出描述:

输出一个整数
示例1

输入

复制
2
3 -1

输出

复制
4
示例2

输入

复制
3
5 3 -1

输出

复制
2
示例3

输入

复制
3
-1 0 40

输出

复制
0
示例4

输入

复制
11
-1 40 -1 -1 -1 10 -1 -1 -1 21 -1

输出

复制
579347890

备注:

子任务1: n <= 10
子任务2: n <= 20
子任务3: 无限制