#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[2][2];
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<<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;
}
}