#codefestival2015exb. [codefestival_2015_ex_b]TRAX

[codefestival_2015_ex_b]TRAX

問題文

すぬけ君はTRAXというボードゲームのコマを並べて遊んでいます。TRAXのコマは下図のようなものです。

token

すぬけ君はこのコマを以下のようなルールで並べようとしています。

  • H\*WH\*W 個のコマを 全て表向きで 、縦 HH 行、横 WW 行のマス目状に敷き詰める。コマの向きは 44 通り考えられるがいずれの向きでも構わない。
  • 赤い線は隣のコマの赤い線と、白い線は隣のコマの白い線と繋がるようにしなければならない。つまり、赤い線の端と白い線の端が隣り合ってはいけない。
  • 輪っかができてはならない。下図は輪っかの例である。右の例の白い線のような大きな輪っかもできてはいけません。

cycle

すぬけ君はすでに NN 個のコマを置きました。i(1iN)i (1 ≦ i ≦ N) 個目のコマは RiR_i 行目の CiC_i 列目に DiD_i の向きで置きました。向きは 141 ~ 4 の整数で表され、それぞれの向きは下図のように対応しています。

direction

さて、残りのコマの置き方は何通りあるでしょうか?答えは非常に大きな数になることがあるので 109+710^9+7 で割った余りを求めてください。


入力

入力は以下の形式で標準入力から与えられる。

HH WW NN R1R_1 C1C_1 D1D_1 R2R_2 C2C_2 D2D_2 : RNR_N CNC_N DND_N

  • 11 行目には、22 つの整数 H(1H105),W(1W105)H (1 ≦ H ≦ 10^5), W (1 ≦ W ≦ 10^5) が空白区切りで与えられる。これは、すぬけ君がコマを縦 HH 行、横 WW 行のマス目状に敷き詰めようとしていることを表す。
  • 22 行目には、すぬけ君がすでに置いたコマの個数を表す整数 N(0N105)N (0 ≦ N ≦ 10^5) が与えられる。
  • 33 行目からの NN 行には、すぬけ君がすでに置いたコマの情報が与えられる。このうち i(1iN)i (1 ≦ i ≦ N) 行目には 33 つの整数 $R_i (1 ≦ R_i ≦ H), C_i (1 ≦ C_i ≦ W), D_i (1 ≦ D_i ≦ 4)$ が空白区切りで与えられる。これは、すぬけ君が RiR_i 行目の CiC_i 列目に DiD_i の向きでコマを置いたことを表している。ただし、同じ場所は 22 回以上与えられない、すなわち pneqqp \\neq q のとき RpneqRqR_p \\neq R_q または CpneqCqC_p \\neq C_q を満たすことが保証される。

部分点

この問題には部分点が設定されている。

  • N=0N = 0 を満たすデータセットに正解した場合は、9090 点が与えられる。
  • 追加の制約のないデータセットに正解した場合は、上記とは別に 6060 点が与えられる。

出力

残りのコマの置き方の個数を 109+7(1,000,000,007)10^9+7 (1,000,000,007) で割った余りを 11 行に出力せよ。出力の末尾に改行を入れること。


入力例1


2 2
1
1 1 4

出力例1


4

下図のような 44 通りの置き方が考えられます。

sample


入力例2


2 10
2
1 1 1
1 2 1

出力例2


0

どのように置いてもルールを満たすような置き方はできません。


入力例3


2015 1114
0

出力例3


711460824

入力例4


2 2
2
1 1 1
2 2 3

出力例4


0

入力例5


5 6
3
1 2 2
4 1 1
5 6 4

出力例5


12

入力例6


5 6
2
3 3 4
3 4 2

出力例6


39