#CF2084E. 绽放

    ID: 7073 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 3 上传者: 标签>其他二分查找双指针扫描数学组合数学动态规划区间DP区间DP*2400

绽放

E. 绽放
时间限制:每个测试点 4 秒
内存限制:512 兆字节


题目描述

给定一个长度为 nn 的排列 aa,其中一些元素缺失,用 1-1 表示。

定义一个排列的为它的所有非空子段的 mex\operatorname{mex} 之和。

求将 aa 中缺失的元素用合法值填充后,能得到的所有有效排列的值的总和,结果对 109+710^9+7 取模。


  • 长度为 nn排列是指由 00n1n-1nn 个整数组成的数组,每个整数恰好出现一次。例如 [1,2,0,4,3][1,2,0,4,3] 是一个排列,但 [0,1,1][0,1,1] 不是(11 出现两次),[0,2,3][0,2,3] 也不是(n=3n=3 却有 33)。
  • mex(c)\operatorname{mex}(c) 表示集合 cc 中未出现的最小非负整数。
  • 子段是指原序列中连续的一段(通过删除开头和结尾若干元素得到)。

输入格式

每个测试文件包含多个测试用例。
第一行包含一个整数 tt1t10001 \le t \le 1000),表示测试用例的数量。

接下来每个测试用例:

  • 第一行包含一个整数 nn1n50001 \le n \le 5000)。
  • 第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ai<n-1 \le a_i < n)。

数据保证 aa 中不为 1-1 的元素互不相同。
所有测试用例的 nn 之和不超过 50005000


输出格式

对于每个测试用例,输出一个整数,表示所有可能排列的值的总和,对 109+710^9+7 取模。


示例

输入

5
2
0 -1
2
-1 -1
3
2 0 1
3
-1 2 -1
5
-1 0 -1 2 -1

输出

3
6
7
10
104

样例解释

第一个测试用例:唯一有效排列是 [0,1][0,1],它的值为:

$$\operatorname{mex}([0]) + \operatorname{mex}([1]) + \operatorname{mex}([0,1]) = 1 + 0 + 2 = 3 $$

答案为 33

第二个测试用例:有两个有效排列 [0,1][0,1][1,0][1,0],它们的值均为 33,答案为 3+3=63+3=6

第四个测试用例:有两个有效排列 [0,2,1][0,2,1][1,2,0][1,2,0],它们的值均为 55,答案为 5+5=105+5=10

其中 [0,2,1][0,2,1] 的值计算如下:

$$\operatorname{mex}([0]) + \operatorname{mex}([2]) + \operatorname{mex}([1]) + \operatorname{mex}([0,2]) + \operatorname{mex}([2,1]) + \operatorname{mex}([0,2,1]) $$=1+0+0+1+0+3=5= 1 + 0 + 0 + 1 + 0 + 3 = 5