[SDOI2019]染色
题号:NC50813
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

给定的格点图。其中一些结点有着已知的颜色,其余的结点还没有被染色。一个合法的染色方案不允许相邻结点有相同的染色。
现在一共有c种不同的颜色,依次记为1到c。请问有多少对未染色结点的合法染色方案?

输入描述:

第一行有两个整数n和c,分别描述了格点图的大小和总的颜色个数。
之后两行,每行有n个整数:如果是0则表示对应结点未被染色,否则一定是一个1到c的整数表示对应结点已经染了某一种颜色。

输出描述:

输出一个整数,为总的染色方案数对取模后的值。
示例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

备注:

子任务1(44分):1≤n≤10000且5≤c≤10000;不存在一列有2个已染色结点;被染色结点全部位于第一行;第一列和最后一列均有结点已被染色。
子任务2(32分):1≤n≤10000且5≤c≤10000;不存在一列有2个已染色结点;第一列和最后一列均有结点已被染色。
子任务3(12分):1≤n≤10000且5≤c≤10000;第一列和最后一列均有结点已被染色。
子任务4(8分):1≤n≤10000且5≤c≤10000。
子任务5(4分):1≤n≤100000且5≤c≤100000。