牛老板的手机应用
题号:NC14677
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 128 M,其他语言256 M
64bit IO Format: %lld

题目描述

牛老板趁着双十一买了一台新手机𝑖𝑃ℎ𝑜𝑛𝑒𝑋。牛老板很高兴的往里面下载了一些应用,并创建了一些文件夹来存放这些应用。
但是这台手机有点奇怪,共有𝑛个文件夹,每个文件夹有一个编号,每个文件夹内的应用也有一个文件夹内编号。
一个文件夹中的应用可以以如下规则换位置:设文件夹中的应用依次编号为1, 2, 3,......,𝑛,一次操作可以让𝑖号应用移动到𝑖 + 1号应用的位置上,𝑛号应用移动到1号应用的位置。同时,手机里还有两个兄弟文件夹,编号为𝑥, 𝑦,两个文件夹可以整体互换位置,但是文件夹互换位置后容量也会互换,应用会自动根据文件夹容量进行调整(如(1, 2)(3, 4, 5)(6),1, 3 文件夹互换后变为(6, 3)(4, 5, 1)(2),1, 2文件夹互换后变为(3, 4)(5, 1, 2)(6)。
现在,黑心商人𝑐𝑡𝑟要为每个应用打一个官方推荐评分,总分为𝑘,每个应用的分数为1~𝑘中的一个整数。现在想请你帮牛老板算一算,如果将所有应用依编号展开成一排,一共有多少种可能的评分方式,如果一个评分方式能经过上述变换后能够得到另外一种评分方式,那么两种评分方式视为一种。(如有3文件夹(1, 2)(3, 4, 5)(6, 7),1, 2文件夹为兄弟文件夹,𝑘 = 10,那么9 4 2 2 2 1 3 与4 9 2 2 2 1 3 与2 2 2 9 4 1 3视为同一种评分,后两者可由两种操作从第一种评分得到)
请注意,答案可能很大,请输出对109 + 7取模后的结果。

输入描述:

输入第一行为一个整数𝑇(1 ≤ 𝑇 ≤ 50),表示一共有𝑇组测试数据。
每组数据有两行:
第一行为两个整数𝑛(1 ≤ 𝑛 ≤ 4)和𝑘(1 ≤ 𝑘 ≤ 2000),分别表示文件夹数与𝑐𝑡𝑟打分范围是[1, 𝑘]。
第二行有𝑛个整数,第𝑖个数表示第𝑖个文件夹里面有𝑎𝑖(1 ≤ 𝑘 ≤ 4)个文件夹。
第三行有两个互不相同的数字𝑥, 𝑦(1 ≤ 𝑥, 𝑦 ≤ 𝑛),表示兄弟文件夹的编号。

输出描述:

对于每组测试数据,输出一个正整数𝑥,表示评分方案总数对109 + 7取模后的结果。
示例1

输入

复制
2
3 1
1 1 1
1 2
2 2
1 2
1 2

输出

复制
1
4

说明

对于第一个样例,只有一种分数,只有1 1 1这一种打分方式。
对于第二个样例,可以的打分方式为(1 1 1)(2 2 2)(1 2 2)(1 1 2)四种。注意(1 2 2)与(2 1 2)与(2 2 1) 可以由操作互相转化,所以视为一种,(1 1 2)也同理。