#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
long long poww(long long n,long long m)
{
long long res=n,ans=1;
while(m)
{
if(m&1) ans=ans*res%mod;
res=res*res%mod,m/=2;
}
return ans;
}
map<int,int> mpx,mpy;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m,k;
cin>>n>>m>>k;
bool e1=true,e2=true,e3=true,e4=true;
int cn=n,cm=m;
for(int i=1;i<=k;i++)
{
int x,y;
char c;
cin>>c>>x>>y;
bool ck=(c=='+');
e1&=((x+y)%2==ck);
e2&=((x+y)%2!=ck);
if(!mpx[x]) cn--,mpx[x]=(y+ck)%2+1;
else if(mpx[x]!=(y+ck)%2+1) e3=false;
if(!mpy[y]) cm--,mpy[y]=(x+ck)%2+1;
else if(mpy[y]!=(x+ck)%2+1) e4=false;
}
long long ans=0;
if(e3) ans=(ans+poww(2,cn))%mod;
if(e4) ans=(ans+poww(2,cm))%mod;
if(e1) ans=(ans+mod-1)%mod;
if(e2) ans=(ans+mod-1)%mod;
cout<<ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |