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

小红拿到了两个长为

的数组

,现在她想生成一个新数组

,具体规则如下:

对于

的第

个元素

,有

的概率

,剩余

的概率

,每一位的概率独立。

小红想知道,最终得到的数组

恰好是一个长为

的
排列的概率是多少?请将答案对
取模后输出。
【名词解释】

长度为

的
排列:由

这

个整数、按任意顺序组成的数组(每个整数均恰好出现一次)。例如,

是一个长度为

的排列,而

和

都不是排列,因为前者存在重复元素,后者包含了超出范围的数。
取模:可以证明答案可以表示为一个不可约分数

,为了避免精度问题,请直接输出整数
)
作为答案,其中
)
,

是满足

的整数。更具体地,你需要找到一个整数
)
满足

对

取模等于

,您可以查看样例解释得到更具体的说明。/

本题中,如果您需要使用到除法的取模,即计算
)
时,

需要使用公式
)
得到。例如,计算

:
%20%5C%5C%0A%26%20%3D%20%26%20250%5C%2C000%5C%2C002%20%5C%5C%0A%5Chline%0A%5Cleft(%5Ctfrac%7B5%7D%7B4%7D%20%5Cbmod%20M%5Cright)%20%26%20%3D%20%26%205%20%5Ctimes4%5E%7B-1%7D%20%5Cbmod%20M%20%5C%5C%0A%26%20%3D%20%26%205%20%5Ctimes%20250%5C%2C000%5C%2C002%20%5Cbmod%20M%20%5C%5C%0A%26%20%3D%20%26%20250%5C%2C000%5C%2C003%0A%5Cend%7Barray%7D)
输入描述:
每个测试文件均包含多组测试数据。第一行输入一个整数
代表数据组数,每组测试数据描述如下:
第一行输入一个整数
。
第二行输入
个整数
。
第三行输入
个整数
。
除此之外,保证单个测试文件的
之和不超过
。
输出描述:
对于每组测试数据,新起一行。
输出一个整数,代表答案对
取模后的值。
示例1
输入
复制
2
4
1 2 3 4
2 1 4 3
2
0 1
0 2