小红的树构造
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小红想让你构造一棵树,共有n个节点,其中有k个节点权值为2,n-k个节点的权值为3。
小红定义路径权值为路径上所有点权值乘积的因子数量。只有长度不小于1的路径是有效的(u到v、v到u是同一条路径)。
小红希望所有的路径的权值乘积尽可能小,你能帮帮她吗?
你不需要输出构造出的树,只需要输出最小的权值乘积即可。答案对10^9+7取模。

输入描述:

两个正整数nk,用空格隔开。
2 \leq n \leq 10^9
0 \le k \le n

输出描述:

最小的权值乘积对10^9+7取模的值。
示例1

输入

复制
4 3

输出

复制
5184

说明

我们构造这样一棵树:
1、2、3号节点权值为2。4号节点权值为3。
1和2连一条边,2和3连一条边,2和4连一条边。
这样共有6条路径:
1-2路径,点权乘积为4,4有3个因子,因此该路径权值为3。
2-3路径,点权乘积为4,4有3个因子,因此该路径权值为3。
2-4路径,点权乘积为6,6有4个因子,因此该路径权值为4。
1-2-3路径,点权乘积为8,8有4个因子,因此该路径权值为4。
1-2-4路径,点权乘积为12,12有6个因子,因此该路径权值为6。
3-2-4路径,点权乘积为12,12有6个因子,因此该路径权值为6。
所有路径权值乘积为5184。
可以证明,这样构造的权值乘积是最小的。