#include<bits/stdc++.h>
using namespace std;
const int mo=1e9+7;
int n,m,k,f[20][1<<19],S[1<<19][20],B[2][22][22];
void inc(int &x,int y){ x=x+y>=mo ? x+y-mo : x+y;}
int main()
{
	int i,j,l,x,y,z;
	cin>>n>>m>>k; n--;
	for(i=1;i<=k;i++){
		scanf("%d %d %d",&x,&y,&z),y--;
		B[z][x][y]=1;
	  }
	f[0][0]=1;
	for(i=0;i<(1<<n);i++){
		S[i][n]=(1<<n);
		for(j=n-1;j>=0;j--){
			S[i][j]=S[i][j+1];
			if((i>>j)&1)
				S[i][j]=(1<<j);
		  }
	  }
	f[0][0]=1;
	for(l=1;l<=m;l++){
		for(j=0;j<n;j++)
			for(i=0;i<(1<<n);i++){
				y=((i>>j)&1);
				for(x=y;x<2;x++){
					if(B[x^1][l][j]) continue;
					if(x==y) inc(f[j+1][i],f[j][i]);
					else{
						z=i^(1<<j);
						if(S[i][j]<(1<<n)) z^=S[i][j];
						inc(f[j+1][z],f[j][i]);
					  }
				  }
			  }
		for(i=0;i<(1<<n);i++){
			f[0][i]=f[n][i];
			for(j=1;j<=n;j++) f[j][i]=0;
		  }
	  }
	int ans=0;
	for(i=0;i<(1<<n);i++)
		inc(ans,f[0][i]);
	cout<<ans;
	return 0;
}
