P14367 [JOISC 2018] 帐篷 / Tents

题目描述

JOI 君经营着一个露营地。该露营地被划分为一个 $H$ 行 $W$ 列的矩形网格。行与东西方向平行,列与南北方向平行。从北往南第 $i$ 行、从东往西第 $j$ 列的区域称为区域 $(i, j)$。 JOI 君打算在部分区域搭建帐篷。每个帐篷必须恰好占据一个区域,且任意两个帐篷不得占据同一区域。 每个帐篷的入口朝向四个方向之一:北、南、东或西。露营地中所搭帐篷的入口方向必须满足以下条件: - 若两个区域 $(i_1, j)$ 和 $(i_2, j)$(其中 $1 \le i_1 < i_2 \le H$,$1 \le j \le W$)均被帐篷占据,则区域 $(i_1, j)$ 中帐篷的入口必须朝南,区域 $(i_2, j)$ 中帐篷的入口必须朝北。 - 若两个区域 $(i, j_1)$ 和 $(i, j_2)$(其中 $1 \le j_1 < j_2 \le W$,$1 \le i \le H$)均被帐篷占据,则区域 $(i, j_1)$ 中帐篷的入口必须朝东,区域 $(i, j_2)$ 中帐篷的入口必须朝西。 JOI 君对在露营地至少搭建一个帐篷的方案总数感到好奇。若存在某个区域,其帐篷状态(是否存在帐篷,或帐篷入口方向)在两种方案中不同,则这两种方案被视为不同。 **任务** 编写一个程序,计算满足题面所述条件的至少搭建一个帐篷的方案总数,对 $1\,000\,000\,007$ 取模后的余数。

输入格式

从标准输入读取以下数据: - 输入第一行包含两个整数 $H$ 和 $W$,表示 JOI 君经营的露营地被划分为 $H$ 行 $W$ 列。

输出格式

向标准输出写入一行。输出应包含满足题面所述条件的至少搭建一个帐篷的方案总数,对 $1\,000\,000\,007$ 取模后的余数。

说明/提示

### 样例 1 解释 如下图所示,共有 $9$ 种搭帐篷的方式。图中字母 $E,W,S,N$ 分别代表出入口朝向东、西、南、北的帐篷。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/lv06p2yd.png) ::: ### 数据范围 所有输入数据满足以下条件: - $1 \le H \le 3\,000$。 - $1 \le W \le 3\,000$。 ### 子任务 共有 2 个子任务。每个子任务的得分和附加约束如下: **子任务 1 [48 分]** - $1 \le H \le 300$。 - $1 \le W \le 300$。 **子任务 2 [52 分]** 无额外约束。