#agc017f. [agc017_f]Zigzag

[agc017_f]Zigzag

问题描述

N(N+1)/2N(N+1)/2个点排列成一个等边三角形,其中每边包含NN个点,如下所示。从上往下第ii行从左往右第jj个点表示为(i,j)(i, j)1iN1 \leq i \leq N, 1ji1 \leq j \leq i)。此外,我们将(i+1,j)(i+1, j)称为(i,j)(i, j)的左下方的点,将(i+1,j+1)(i+1, j+1)称为(i,j)(i, j)的右下方的点。

高桥通过连接这些点绘制了MM条多边形线段L1,L2,...,LML_1, L_2, ..., L_M。每条LiL_i(1,1)(1, 1)开始,并访问当前点的左下方或右下方的点N1N-1次。更准确地说,存在Xi,1,...,Xi,NX_{i,1}, ..., X_{i,N}使得:

  • LiL_i按照顺序连接NN个点(1,Xi,1),(2,Xi,2),...,(N,Xi,N)(1, X_{i,1}), (2, X_{i,2}), ..., (N, X_{i,N})
  • 对于每个j=1,2,...,N1j=1, 2, ..., N-1,要么Xi,j+1=Xi,jX_{i,j+1} = X_{i,j},要么Xi,j+1=Xi,j+1X_{i,j+1} = X_{i,j}+1

高桥希望绘制这些线段,使得Li+1L_{i+1}的任何部分都不在LiL_i的左边。也就是说,对于每个j=1,2,...,Nj=1, 2, ..., N,必须满足X1,jX2,j...XM,jX_{1,j} \leq X_{2,j} \leq ... \leq X_{M,j}

此外,对线段的形状有KK个约束条件必须遵循。第ii个条件表示为(Ai,Bi,Ci)(A_i, B_i, C_i),其中:

  • 如果Ci=0C_i=0,则LAiL_{A_i}必须在第BiB_i步访问左下方的点。
  • 如果Ci=1C_i=1,则LAiL_{A_i}必须在第BiB_i步访问右下方的点。

也就是说,必须满足XAi,Bi+1=XAi,Bi+CiX_{A_i, {B_i}+1} = X_{A_i, B_i} + C_i

高桥有多少种方式可以绘制MM条多边形线段?找到模10000000071000000007的计数。

注意事项

在提交之前,强烈建议使用"自定义测试"来测量代码的执行时间。

约束条件

  • 1N201 \leq N \leq 20
  • 1M201 \leq M \leq 20
  • 0K(N1)M0 \leq K \leq (N-1)M
  • 1AiM1 \leq A_i \leq M
  • 1BiN11 \leq B_i \leq N-1
  • Ci=0C_i = 0 或者 11
  • (Ai,Bi)(A_i, B_i)不会出现两次。

输入

输入以以下格式从标准输入给出:

NN MM KK A1A_1 B1B_1 C1C_1 A2A_2 B2B_2 C2C_2 : AKA_K BKB_K CKC_K

输出

输出高桥绘制MM条多边形线段的方法数,对10000000071000000007取模。


示例输入1

3 2 1
1 2 0

示例输出1

6

有六种绘制线段的方法,如下所示。其中,红线代表L1L_1,绿线代表L2L_2


示例输入2

3 2 2
1 1 1
2 1 0

示例输出2

0

示例输入3

5 4 2
1 3 1
4 2 0

示例输出3

172

示例输入4

20 20 0

示例输出4

881396682