P16482 [GKS 2014 #B] Password Attacker
题目描述
密码在我们的生活中被广泛使用:用于 ATM 机、在线论坛登录、手机解锁以及门禁系统。每个人都关心密码的安全性。然而,攻击者总能找到方法窃取我们的密码。以下是一种可能的情形:
假设攻击者 Eve 想要窃取受害者 Alice 的密码。Eve 事先清洁了键盘。在 Alice 键入密码并离开后,Eve 收集键盘上的指纹。现在,她知道了密码中使用了哪些按键。但是,Eve 无从得知每个按键被按下了多少次,也无从得知按键序列的顺序。
为了简化问题,假设 Eve 发现 Alice 的指纹只出现在 $M$ 个按键上。同时,她通过其他途径得知,Alice 的密码包含 $N$ 个字符。此外,键盘上的每一次击键只会产生一个单一且唯一的字符。而且,Alice 不会按下其他无关的按键,例如“左箭头”、“Home”、“退格”等。
这里有一个例子。假设 Eve 在 $M=3$ 个按键 '3'、'7' 和 '5' 上发现了 Alice 的指纹,并且她知道 Alice 的密码长度为 $N=4$ 位。那么,以下所有密码都是可能的:$3577$、$3557$、$7353$ 和 $5735$。(事实上,还有 $32$ 个其他可能的密码。)
然而,以下这些密码是不可能的:
| 密码示例 | 原因 |
|:-:|:---|
| 1357 | 按键 '1' 上没有指纹 |
| 3355 | 按键 '7' 上有指纹,因此 '7' 必须至少出现一次。 |
| 357 | Eve 知道密码必须是一个 4 位数字。 |
根据这些信息,请统计共有多少个可能的密码满足上述条件。由于结果可能很大,请输出答案对 $10^9+7$ 取模后的值。
输入格式
输入的第一行给出测试用例的数量 $T$。接下来的 $T$ 行,每行包含两个用空格分隔的整数 $M$ 和 $N$,表示一个测试用例。
输出格式
对于每个测试用例,输出一行 `Case #x: y`,其中 $x$ 是测试用例编号(从 $1$ 开始),$y$ 是可能的密码总数对 $10^9+7$ 取模的结果。
说明/提示
### 限制
**小数据集(测试集 1 - 可见)**
$T = 15$
$1 \le M \le N \le 7$
**大数据集(测试集 2 - 隐藏)**
$T = 100$
$1 \le M \le N \le 100$
翻译由 DeepSeek V4 Pro 完成