CF895D String Mark
题目描述
在 Byteland 州立大学,成绩是等长的字符串。如果字符串 $y$ 按字典序小于 $x$,则成绩 $x$ 被认为比 $y$ 好。
最近在 BSU 进行了一次重要的测试,Vasya 得到了成绩 $a$。教师很难记住每个学生的确切成绩,但他知道某个成绩 $b$,所有学生的成绩都严格小于 $b$。
Vasya 对自己的成绩不满意,他决定提升成绩。他可以任意次数交换自己成绩字符串中的字符。现在他想知道,有多少种不同的方法可以提升自己的成绩,同时不让老师察觉到任何异常。
更正式地说:给定两个等长字符串 $a$ 和 $b$,需要计算有多少不同的字符串 $c$ 满足以下条件:
1)$c$ 可以通过交换 $a$ 中的某些字符获得,换句话说,$c$ 是 $a$ 的一个排列。
2)字符串 $a$ 按字典序小于 $c$。
3)字符串 $c$ 按字典序小于 $b$。
对于两个等长的字符串 $x$ 和 $y$,如果存在某个下标 $i$,使得 $x_1 = y_1, x_2 = y_2, ..., x_{i-1} = y_{i-1}, x_i < y_i$,则 $x$ 按字典序小于 $y$。
由于答案可能非常大,结果需要对 $10^9+7$ 取模。
输入格式
第一行输入字符串 $a$,第二行输入字符串 $b$。字符串 $a, b$ 由小写英文字母组成,长度相等且不超过 $10^6$。
保证 $a$ 按字典序小于 $b$。
输出格式
输出一个整数,表示满足题意的不同字符串数量,对 $10^9+7$ 取模。
说明/提示
在第一个样例中,可以由字符串 $abc$ 得到字符串 $acb, bac, bca, cab, cba$,它们都比 $abc$ 大且比 $ddd$ 小,所以答案是 $5$。
在第二个样例中,由 $abcdef$ 得到的任意字符串都比 $abcdeg$ 大。所以答案是 $0$。
由 ChatGPT 5 翻译