每个格子填的肯定只有1或-1,从每一行看,不管前面填的是什么,最后都一定有办法填一个数使得乘积满足题目要求,每一列也是如此。所以填数的办法就是(n-1)*(m-1)个,又因为只能填1或-1,所有答案就是2的(n-1)*(m-1)次方。又因为n和m都特别大,所以需要自己写一个快速幂。如果n和m的奇偶性不同且k是-1,就一定没有办法填数
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll q_pow(ll a,ll b){
ll ans=1;
while(b){
if(b&1) ans=ans*a%mod;
b>>=1;
a=a*a%mod;
}
return ans;
}
int main(){
ll n,m,k;
while(cin>>n>>m>>k){
if(((n%2)!=(m%2))&&k==-1) cout<<0<<endl;
else cout<<q_pow(q_pow(2,n-1),m-1)<<endl;
}
}