在一门离散数学的在线课程中,最近的一节课专门讨论了由正方形单元格组成的各种 $n \times m$ 矩形网格的正确骨牌覆盖问题。在这些网格中,某些单元格可能会被剪掉。教授将这种网格称为“拼图”(jigsaw puzzles)。
解决一个拼图意味着找到一种用大小为 $1 \times 2$ 的骨牌覆盖给定网格的方法,使得满足以下条件:
- 骨牌覆盖网格中所有未被剪掉的单元格;
- 所有骨牌完全位于网格内部;
- 骨牌之间互不重叠;
- 骨牌不覆盖任何被剪掉的单元格。
现在,教授想知道他的课讲得有多通俗易懂。为了弄清这一点,他决定给所有学生布置拼图任务来解答。教授不想让学生们的生活太艰难,因此他决定每个拼图都必须至少有一个解。但同时,他也希望每个人都能独立完成作业,因此他希望所有的拼图都是不同的。
在教授设计他的拼图之前,他想知道存在多少种不同的拼图。你能帮帮他吗?
你的任务是计算大小为 $n \times m$ 且至少存在一种正确骨牌覆盖的不同网格的数量。请记住,网格中的某些单元格可以被剪掉。这个数量可能非常大,因此你必须将其对 $10^9 + 7$ 取模后输出。
如果在一个 $n \times m$ 的网格中,存在某个单元格在其中一个网格中被剪掉,而在另一个网格中没有被剪掉,则认为这两个网格是不同的。网格不能进行翻转或旋转。
输入格式
输入仅包含一行,包含两个整数 $n$ 和 $m$($1 \le n \le 6$,$1 \le m \le 500$),由一个空格隔开。
输出格式
输出应包含一行,包含一个整数:问题的答案。
样例
输入样例 1
1 2
输出样例 1
2
输入样例 2
2 3
输出样例 2
18