3
long long myPow(long long base, long long exponent, long long mod) {4
if (exponent == 0) return 1;5
if (exponent == 1) return base % mod;7
long long tmp = myPow(base, exponent / 2, mod);9
if (exponent % 2 == 0) { // (base ^ exponent/2) * (base ^ exponent/2)10
return (tmp * tmp) % mod;11
} else { // (base ^ exponent/2) * (base ^ exponent/2) * base12
tmp = tmp * tmp % mod;14
return (tmp * base) % mod;18
int minNonZeroProduct(int p) {19
long long range = pow(2, p);21
long long mod = pow(10, 9) + 7;22
long long tmp = myPow(range - 1, range / 2, mod);23
return (tmp * (range % mod)) % mod;