#CF1838E. 统计超序列

统计超序列

统计超序列

  • 时间限制:3 秒
  • 内存限制:256 MiB

题目描述

给定一个长度为 nn 的整数数组 aa,其中所有元素 aia_i 都在区间 [1,k][1, k] 内。问有多少个长度为 mm 的不同整数数组 bb,其中所有元素 bib_i 也都在区间 [1,k][1, k] 内,并且 aa 是 bb 的一个子序列?如果两个数组在至少一个位置不同,则认为它们是不同的。

如果一个序列 xx 可以通过从序列 yy 中删除若干(可能为零或全部)元素得到,则称 xx 是 yy 的一个子序列。

由于答案可能很大,请输出答案对 109+710^9+7 取模后的结果。

输入格式

输入的第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含三个整数 nn、mm、kk(1≤n≤2⋅1051 \le n \le 2\cdot 10^5,n≤m≤109n \le m \le 10^9,1≤k≤1091 \le k \le 10^9),分别表示数组 aa 的长度、数组 bb 的长度,以及数组中允许的最大值。

接下来一行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤ai≤k1 \le a_i \le k),表示数组 aa 的元素。

保证所有测试用例中 nn 的总和不超过 2⋅1052\cdot 10^5。

输出格式

对于每个测试用例,输出一个整数,表示满足条件的数组 bb 的数量,对 109+710^9+7 取模。

样例输入 1

7
1 1000000 1
1
3 4 3
1 2 2
5 7 8
1 2 3 4 1
6 6 18
18 2 2 5 2 16
1 10 2
1
8 10 1234567
1 1 2 1 2 2 2 1
5 1000000000 1000000000
525785549 816356460 108064697 194447117 725595511

样例输出 1

1
9
1079
1
1023
906241579
232432822

提示

对于第一个样例,由于 k=1k=1,只有一个长度为 mm 的数组,即 [1,1,…,1][1, 1, \ldots, 1]。这个数组包含原数组作为子序列,因此答案为 1。

对于第二个样例,满足条件的 99 个数组分别为 [1,1,2,2][1, 1, 2, 2],[1,2,1,2][1, 2, 1, 2],[1,2,2,1][1, 2, 2, 1],[1,2,2,2][1, 2, 2, 2],[1,2,2,3][1, 2, 2, 3],[1,2,3,2][1, 2, 3, 2],[1,3,2,2][1, 3, 2, 2],[2,1,2,2][2, 1, 2, 2],[3,1,2,2][3, 1, 2, 2]。

对于第四个样例,由于 m=nm=n,唯一一个长度为 mm 的数组包含 aa 作为子序列的就是 aa 本身。

数据范围

对于所有数据,1≤t≤1041\le t\le10^4,1≤n≤2×1051\le n\le2\times10^5,n≤m≤109n\le m\le10^9,1≤k≤1091\le k\le10^9,1≤ai≤k1\le a_i\le k,且所有测试用例的 nn 之和不超过 2×1052\times10^5。

子任务编号 分值 特殊限制
1 30 t≤10t\le10,n≤6n\le6,m≤8m\le8,k≤4k\le4
2 t≤20t\le20,n≤200n\le200,m≤2000m\le2000,且 ∑(nm)≤106\sum(nm)\le10^6
3 40 无特殊限制

每个测试点独立计分。