#SZSY1008. 网格布阵

网格布阵

题目描述

样例

有一个 22 行 nn 列的网格。部分格子已经驻扎了士兵,每名士兵的兵种是 11 到 mm 中的一个整数。

你需要在每个空格中安排一名士兵,其兵种可以任意选择。已经驻扎的士兵及其兵种不能改变。

安排完成后,每两个共用一条边的格子上的士兵必须属于不同兵种。求合法安排的方案数,对 109+910^9+9 取模。若无法完成合法安排,输出 00。

输入格式

第一行包含两个整数 n,mn,m。

第二行包含 nn 个整数,依次描述第一行的格子。第三行包含 nn 个整数,依次描述第二行的格子。

每个整数为 00 时,表示该格为空;否则表示该格已有士兵的兵种。

输出格式

输出一个整数,表示合法安排的方案数对 109+910^9+9 取模后的值。

数据范围

所有数据满足 1≤n≤1051\le n\le10^5、5≤m≤1055\le m\le10^5;描述格子的每个整数均在 00 到 mm 之间。

子任务

编号 分值 缩减范围 附加限制
1 10 n,m≤50n,m\le 50 —
2 n,m≤500n,m\le 500
3 25 n,m≤104n,m\le 10^4 不存在一列驻扎了两个士兵。
第二行没有已驻扎的士兵。
第一列和最后一列均有已驻扎的士兵。
4 15 不存在一列驻扎了两个士兵。
第一列和最后一列均有已驻扎的士兵。
5 第一列和最后一列均有已驻扎的士兵。
6 5 —
7 20 —

样例 1

3 5
1 0 1
0 0 0
172

样例 2

5 7
1 0 0 0 2
0 0 3 0 0
116370

样例 3

10 13
0 2 0 0 1 0 2 0 0 3
0 1 0 1 0 0 0 0 4 0
770175525