#ATagc017f. [AGC017F] Zigzag

[AGC017F] Zigzag

题目描述

如上图所示,有 NN 个点构成边长为 11 的正三角形,每个点都排列成正三角形的形状,总共有 N(N+1)/2N(N+1)/2 个点。我们用 (i, j)(i,\ j) 表示从上往下第 ii 行、从左往右第 jj 个点(1iN1\leq i\leq N1ji1\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 条折线 1,2,,M1,2,\ldots, M。每条折线都从 (1,1)(1,1) 出发,随后「每次选择当前位置的正左下方或正右下方的点,用直线连接到那个点并移动过去」,重复 N1N-1 次。因此,存在某些 Xi,1,,Xi,NX_{i,1},\ldots, X_{i,N} 满足以下条件:

  • 折线 ii 依次连接 NN 个点 (1, Xi,1), (2, Xi,2),,(N, Xi,N)(1,\ X_{i,1}),\ (2,\ X_{i,2}),\ldots,(N,\ X_{i,N})
  • 对于 j=1,2,,N1j=1,2,\ldots, 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

高桥君希望画图时,编号大的折线不会位于编号小的折线左边。也就是说,对于 j=1,2,,Nj=1,2,\ldots,N,有 X1,jX2,jXM,jX_{1,j}\leq X_{2,j}\leq\ldots\leq X_{M,j}

此外,高桥君还需要满足关于曲线拐弯的 KK 个条件。第 ii 个条件 (Ai, Bi, Ci)(A_i,\ B_i,\ C_i) 的意义如下:

  • Ci=0C_i=0 时,画折线 AiA_i 时,在第 BiB_i 次移动时,必须选择左下方的点。
  • Ci=1C_i=1 时,画折线 AiA_i 时,在第 BiB_i 次移动时,必须选择右下方的点。

换句话说,XAi,Bi+1=XAi,Bi+CiX_{A_i,B_i+1} = X_{A_i,B_i} + C_i

请计算,高桥君能画出不同的 MM 条折线的方案数,对 10000000071000000007 取模后输出。

输入格式

输入从标准输入读入,格式如下:

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

输出格式

输出高桥君画 MM 条折线的方案数,对 10000000071000000007 取模。

样例 1

输入

3 2 1
1 2 0

输出

6

样例 2

输入

3 2 2
1 1 1
2 1 0

输出

0

样例 3

输入

5 4 2
1 3 1
4 2 0

输出

172

样例 4

输入

20 20 0

输出

881396682

说明/提示

注意

提交前,强烈建议使用“代码测试”测量运行时间。

限制

  • 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=0,1C_i=0,1
  • (Ai,Bi)(A_i,B_i) 作为同一组不会重复出现多次。

样例解释 1

如图所示,共有 66 种画法。红线表示折线 11,绿色表示折线 22

由 ChatGPT 5 翻译