#agc013d. [agc013_d]Piling Up

[agc013_d]Piling Up

题目描述

Joisino有许多红色和蓝色的砖块以及一个大箱子。她将按照以下方式用这些砖块建造塔楼。

首先,她会挑选总共 NN 个砖块放入箱子中。在这里,箱子中每种颜色的砖块数量可以任意,只要总数是 NN 即可。特别地,红色砖块或蓝色砖块的数量可以为零。然后,她将重复进行 MM 次操作,每次操作包括以下三个步骤:

  • 从箱子中取出一个任意的砖块。
  • 放入一个红色砖块和一个蓝色砖块到箱子中。
  • 从箱子中再取出一个任意的砖块。

经过 MM 次操作之后,Joisino将按照从箱子中取出的顺序依次堆叠起来,形成 2timesM2 \\times M 个砖块的塔楼。她感兴趣的问题是:这 2timesM2 \\times M 个砖块的颜色序列有多少种可能性?请编写程序求出答案。由于答案可能非常大,输出计数对 109+710^9+7 取模的结果。

约束条件

  • 1leqNleq30001 \\leq N \\leq 3000
  • 1leqMleq30001 \\leq M \\leq 3000

输入

从标准输入读入输入数据,具体格式如下:

NN MM

输出

打印出可能的 2timesM2 \\times M 个砖块颜色序列的不同组合数量,对 109+710^9+7 取模。

示例输入 1

2 3

示例输出 1

56

总共将从箱子中取出六个砖块。唯一不可能的颜色序列是第二个、第三个、第四个和第五个砖块的颜色都相同的序列。因此,有 262times2times2=562^6 - 2 \\times 2 \\times 2 = 56 种可能的颜色序列。

示例输入 2

1000 10

示例输出 2

1048576

示例输入 3

1000 3000

示例输出 3

693347555