#include <iostream>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll powmod(ll a,ll b)
{
ll p=1;
while(b)
{
if(b&1)p=(p*a)%mod;
b>>=1;
a=(a*a)%mod;
}
return p;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ll n,m,k;
cin>>n>>m>>k;
ll ans=0;
if(n==1)
{
cout<<powmod(2,m-k)<<endl;
}
else if(m==1)
{
cout<<powmod(2,n-k)<<endl;
}
else
{
int x[k],y[k];
char c[k],a[n][m];
for(int i=0;i<k;i++)cin>>c[i]>>x[i]>>y[i],x[i]--,y[i]--;
// 2<=n,m
for(int mk=0;mk<(1<<(n*m));mk++)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
a[i][j]=(((mk>>(i*m+j))&1)?'+':'-');
}
}
bool fl=1;
for(int i=0;i<k;i++)
{
if(a[x[i]][y[i]]!=c[i])
{
fl=0;
}
}
for(int i=0;i+1<n;i++)
{
for(int j=0;j+1<m;j++)
{
fl&=((a[i][j]=='+')+(a[i][j+1]=='+')+(a[i+1][j]=='+')+(a[i+1][j+1]=='+') == 2);
}
}
ans+=fl;
}
// for(int mk=0;mk<(1<<4);mk++)
// {
// a[0][0]=((mk&1)?'+':'-');
// a[0][1]=((mk&2)?'+':'-');
// a[1][0]=((mk&4)?'+':'-');
// a[1][1]=((mk&8)?'+':'-');
// bool fl=((a[0][0]=='+')+(a[0][1]=='+')+(a[1][0]=='+')+(a[1][1]=='+') == 2); // only 2 + and 2 -
// for(int i=0;i<k;i++)
// {
// if(a[x[i]%2][y[i]%2]!=c[i])
// {
// fl=0;
// }
// }
// ans+=fl;
// }
cout<<ans<<endl;
}
}