题号:NC258599
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
Special Judge, 64bit IO Format: %lld
题目描述
我们定义,当一个序列

存在一个

满足:
对于所有的

满足

(

)

(

)
那么我们称这个序列为
山峰序列。
例如
![[1,2,3,2,1]](https://www.nowcoder.com/equation?tex=%5B1%2C2%2C3%2C2%2C1%5D)
,
![[5,4,3,2,1]](https://www.nowcoder.com/equation?tex=%5B5%2C4%2C3%2C2%2C1%5D)
,
![[1,1,3]](https://www.nowcoder.com/equation?tex=%5B1%2C1%2C3%5D)
是
山峰序列。
而
![[1,3,1,5,5,4]](https://www.nowcoder.com/equation?tex=%5B1%2C3%2C1%2C5%2C5%2C4%5D)
,
![[1,3,1,2]](https://www.nowcoder.com/equation?tex=%5B1%2C3%2C1%2C2%5D)
,就不是
山峰序列。
现在 Antiamuny 给你了一个长度为

的序列,他想重排这个序列,并且他想知道有多少种方法可以使重排后的序列为
山峰序列。
两种重排的方法不同当且仅当得到的序列不同,比如对于序列
![[1,1,2]](https://www.nowcoder.com/equation?tex=%5B1%2C1%2C2%5D)
,只有
![[1,1,2]](https://www.nowcoder.com/equation?tex=%5B1%2C1%2C2%5D)
,
![[1,2,1]](https://www.nowcoder.com/equation?tex=%5B1%2C2%2C1%5D)
,
![[2,1,1]](https://www.nowcoder.com/equation?tex=%5B2%2C1%2C1%5D)
这三种不同的重排方法。
输入描述:
第一行包含一个整数
(
),表示询问组数。
对于每组数据,第一行包含一个整数
(
),表示给定的序列长度。
第二行包含
个正整数
(
),表示给出的序列。
输入数据保证 
输出描述:
输出
行,每行一个整数,第
行表示第
个询问的答案。
因为答案可能过大,所以你需要输出答案对于
的余数。
示例1
输入
复制
3
5
1 2 3 4 5
3
3 3 3
3
1 2 1