Permutation
题号:NC201120
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

You are given a permutation . You can do the following operations repeatedly:
  • Choose an interval where p_l is the smallest element in this interval, you can permutate in arbitrary way.
  • Choose an interval where is the smallest element in this interval, you can permutate in arbitrary way.
You want to know how many distinct permutations you can get using operations. The answer can be large, output the answer modulo .

输入描述:

The first line contains an integer  denoting the number of test cases ().
The first line in a test case contains two integers and (, ). The sum of over all test cases does not exceed .
The second line in a test case contains a permutation ().

输出描述:

For each test case, output one line containing the answer modulo .
示例1

输入

复制
5
5 3
3 4 2 1 5
5 4
4 2 1 3 5
5 2
4 5 3 1 2
5 3
4 3 2 1 5
5 2
2 3 1 5 4

输出

复制
6
1
4
6
4