#include<iostream>
#include<cstdio>
#define MN 20
#define mod 1000000007
using namespace std;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int f[1<<MN],g[1<<MN],n,m,K,d[MN+5][MN+5],C[1<<MN],ans=0;
inline void R(int&x,int y){x+=y;x>=mod?x-=mod:0;}
int main()
{
	n=read();m=read();K=read();f[0]=1;
	for(int i=1;i<=K;++i) 
	{
		int x=read(),y=read();
		d[x][y]=read()+1;	
	}
	for(int i=1;i<1<<n;++i)
		for(int j=0;j<n;++j) if(i&(1<<j)) {C[i]=i^(1<<j);break;}	
	for(int i=1;i<=m;++i) for(int j=1;j<n;++j) 
	{
		for(int k=0;k<1<<n;++k) if(f[k])
		{
			int pre=k&((1<<j-1)-1),aft=k-pre;
			if(d[i][j]!=2&&!(aft&(1<<j-1))) R(g[k],f[k]);
			if(d[i][j]!=1) R(g[pre|(1<<j-1)|C[aft]],f[k]);
		}
		for(int k=0;k<1<<n;++k) f[k]=g[k],g[k]=0;
	}
	for(int i=0;i<1<<n;++i) R(ans,f[i]);
	cout<<ans;
	return 0;
}

