骨牌覆盖
题号:NC17878
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

有一个n行m列的网格,其中一些相邻的格子之间有隔板,你需要在网格中放置如图所示的五种骨牌,满足以下要求:
1.每种骨牌可以使用任意次,也可以不使用
2.骨牌不能越过隔板
3.两块骨牌不能有重叠部分
4.每个格子都被骨牌覆盖
求有多少种方案,答案对100000007取模。

输入描述:

方便起见,用(x,y)表示从上到下第x行的从左到右第y个格子
第一行两个整数n,m
接下来n行,每行m-1个整数,第x行第y个数表示(x,y)和(x,y+1)之间是否有隔板,若是,则为0,否则为1
接下来n-1行,每行m个整数,第x行第y个数表示(x,y)和(x+1,y)之间是否有隔板,若是,则为0,否则为1
1≤m≤n≤20

输出描述:

输出一个整数,表示取模后的答案
示例1

输入

复制
2 2
1
0
1 1

输出

复制
6