你在高速公路上开车时因超速被交警拦下。交警发现你一直在加速且从未使用过刹车,对此感到非常惊讶!现在你需要一个合理的借口来解释这一行为。
你决定辩称:“我看到的限速标志都是按递增顺序排列的,所以我才一直在加速。”交警听后大笑,并告诉你这段高速公路上所有限速标志的序列,还说你不可能那么幸运,刚好只看到了其中按递增顺序排列的一部分。
现在你需要评估这种可能性,换句话说,找出给定序列中有多少个不同的严格递增子序列。空子序列不计入在内,因为那意味着你根本没有看任何限速标志!
例如,$(1, 2, 5)$ 是 $(1, 4, 2, 3, 5, 5)$ 的一个递增子序列,我们将其计为两次,因为从列表中选择 $(1, 2, 5)$ 有两种方式。
输入格式
输入的第一行包含测试用例的数量 $N$。接下来是 $N$ 个测试用例。每个测试用例的第一行包含 $n, m, X, Y$ 和 $Z$,各数之间用空格分隔。$n$ 是限速序列的长度,$m$ 是生成数组 $A$ 的长度。接下来的 $m$ 行包含 $A$ 的 $m$ 个元素,每行一个整数(从 $A[0]$ 到 $A[m-1]$)。
使用 $A, X, Y$ 和 $Z$,通过以下伪代码可以按顺序生成限速序列。mod 表示取余运算。
for i = 0 to n-1
print A[i mod m]
A[i mod m] = (X * A[i mod m] + Y * (i + 1)) mod Z
注意:输入生成方式与预期的解法无关,仅用于减小输入文件的大小。
输出格式
对于每个测试用例,输出一行 "Case #$T$: $S$"(引号仅为清晰起见),其中 $T$ 是测试用例编号,$S$ 是非空递增子序列的数量,对 $1\,000\,000\,007$ 取模。
数据范围
$1 \le N \le 20$
$1 \le m \le 100$
$0 \le X \le 10^9$
$0 \le Y \le 10^9$
$1 \le Z \le 10^9$
$0 \le A[i] < Z$
小数据集(测试集 1 - 可见;15 分)
$1 \le m \le n \le 1000$
大数据集(测试集 2 - 隐藏;35 分)
$1 \le m \le n \le 500000$
样例
样例输入 1
2 5 5 0 0 5 1 2 1 2 3 6 2 2 1000000000 6 1 2
样例输出 1
Case #1: 15 Case #2: 13
说明
案例 2 的限速标志序列应为 1, 2, 0, 0, 0, 4。