题号: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