题目描述
高桥君和雪君想出了一个使用数列的游戏,规则如下:
-
准备一个长度为 M 的数列 a = a1, a2, …, aM,由介于 0 和 2N−1 之间的整数构成。
-
首先,雪君可以进行以下操作任意次:
- 选择一个正整数 d,对于所有的 i (1 ≤ i ≤ M),将 ai 用二进制表示时的第 d 位(最低位为第 1 位)变为 0。
-
在雪君的所有操作结束后,高桥君可以进行以下操作任意次,目标是使 a 升序排列。这里,序列 a 是升序的,当且仅当对于任意 i (1 ≤ i ≤ M − 1),都有 ai ≤ ai + 1。
- 选择序列 a 中相邻的两个元素 ai, ai + 1,如果 ai 和 ai + 1 用二进制表示时恰好有一位不同,则交换 ai 和 ai + 1。
可以用于游戏的、由介于 0 和 2N−1 之间的整数构成且长度为 M 的序列共有 2NM 个。
其中,有多少个序列满足:在游戏中使用时,无论雪君如何进行操作,高桥君都能通过适当的操作将序列升序排列?请输出答案对 109 + 7 取模的结果。
输入格式
输入以以下格式从标准输入给出:
N M
输出格式
输出满足条件的序列个数对 109 + 7 取模的结果。条件为:在游戏中使用时,无论雪君如何进行操作,高桥君都能通过适当的操作将序列升序排列。
输入输出样例 #1
输入 #1
2 5
输出 #1
352
输入输出样例 #2
输入 #2
2020 530
输出 #2
823277409
说明/提示
约束条件
- 输入均为整数。
- 1 ≤ N ≤ 5000
- 2 ≤ M ≤ 5000
样例解释 1
例如,考虑序列 a = 1, 3, 1, 3, 1。此时:
- 将各元素的第 1 位变为 0,则 a 变为 0, 2, 0, 2, 0;
- 将各元素的第 2 位变为 0,则 a 变为 1, 1, 1, 1, 1;
- 将各元素的第 1 位和第 2 位都变为 0,则 a 变为 0, 0, 0, 0, 0。
包括雪君不进行操作而 a 不变的情况,在每种情况下,高桥君都可以通过重复交换二进制表示恰好有一位不同的相邻元素,将序列升序排列。
因此,这个序列是满足条件的序列之一。