#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MOD = 1e9+7;
int put(int a, int exp)
{
if(exp==0)
return 1;
if(exp%2==0)
return put(a*a%MOD,exp/2);
else
return put(a*a%MOD,exp/2)*a%MOD;
}
int n,m,k;
map<int,int> onlin,oncol;
signed main()
{
cin>>n>>m>>k;
bool all1=1,all2=1,good_lin=1,good_col=1;
int fixlin=0,fixcol=0;
for(int i=1;i<=k;i++)
{
char ch;
int x,y,c;
cin>>ch>>x>>y;
if(ch=='+') c=1;
else c=0;
c = (c ^ (x%2) ^ (y%2)) + 1;
if(onlin[x]==0)
onlin[x] = c, fixlin++;
else if(onlin[x]!=c)
good_lin = 0;
if(oncol[y]==0)
oncol[y] = c, fixcol++;
else if(oncol[y]!=c)
good_col = 0;
if(c==1) all2 = 0;
else all1 = 0;
}
int rez=0;
if(k==0)
{
rez += put(2,n) - 2;
rez += put(2,m) - 2;
rez += 2;
rez = (rez + MOD)%MOD;
}
else if(all1 || all2)
{
assert(good_lin);
assert(good_col);
rez += put(2, n - fixlin) - 1;
rez += put(2, m - fixcol) - 1;
rez++;
rez = (rez + MOD)%MOD;
}
else if(good_lin)
{
assert(!good_col);
rez = put(2, n - fixlin);
//cout<<"good_lin\n";
}
else if(good_col)
{
assert(!good_lin);
rez = put(2, m - fixcol);
//cout<<"good_col\n";
}
cout<<rez;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |