// solution.cpp
// Compile: g++ -std=c++17 -O2 solution.cpp -o solution
// Problem: maximize 2048-like score on n x m when you control moves and spawns.
// Formula used: Answer = 2^(K+2) - 4K - 4 (mod MOD), K = n*m, special-case K=1 -> 0.
#include <bits/stdc++.h>
using namespace std;
using u128 = __uint128_t;
using i128 = __int128_t;
using ull = unsigned long long;
using ll = long long;
ull mul_mod_u128(ull a, ull b, ull mod){
if(mod == 0) return 0;
u128 res = (u128)a * (u128)b;
res %= (u128)mod;
return (ull)res;
}
ull pow2_mod(i128 exp, ull mod){
// compute 2^exp % mod, exp >= 0
if(mod == 1) return 0;
ull base = 2 % mod;
ull res = 1 % mod;
while(exp > 0){
if((exp & 1) != 0) res = mul_mod_u128(res, base, mod);
base = mul_mod_u128(base, base, mod);
exp >>= 1;
}
return res;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
unsigned long long n, m;
unsigned long long MOD;
if(!(cin >> n >> m >> MOD)) return 0;
i128 K = (i128)n * (i128)m; // up to 1e18 safe in i128
if(MOD == 1){
cout << 0 << '\n';
return 0;
}
if(K == 1){
cout << 0 % MOD << '\n';
return 0;
}
// compute pow = 2^(K+2) % MOD
i128 exp = K + 2;
ull pow2 = pow2_mod(exp, MOD);
// compute term = (pow2 - (4*K + 4)) mod MOD
// compute 4*K mod MOD
// K mod MOD:
ull Kmod = (ull)((u128)K % (u128)MOD);
ull fourK = mul_mod_u128( (ull)4 % MOD, Kmod, MOD );
// subtract safely:
// ans = pow2 - fourK - 4 (mod MOD)
long long tmp = 0;
// do modular subtraction using unsigned arithmetic
ull ans;
// compute (pow2 + MOD - fourK) % MOD first
if(pow2 >= fourK) ans = (pow2 - fourK) % MOD;
else ans = (MOD - ((fourK - pow2) % MOD)) % MOD;
// subtract 4
if(ans >= (ull)4) ans = (ans - 4) % MOD;
else ans = (MOD - ((4 - ans) % MOD)) % MOD;
cout << ans << '\n';
return 0;
}
Ly8gc29sdXRpb24uY3BwCi8vIENvbXBpbGU6IGcrKyAtc3RkPWMrKzE3IC1PMiBzb2x1dGlvbi5jcHAgLW8gc29sdXRpb24KLy8gUHJvYmxlbTogbWF4aW1pemUgMjA0OC1saWtlIHNjb3JlIG9uIG4geCBtIHdoZW4geW91IGNvbnRyb2wgbW92ZXMgYW5kIHNwYXducy4KLy8gRm9ybXVsYSB1c2VkOiBBbnN3ZXIgPSAyXihLKzIpIC0gNEsgLSA0ICAobW9kIE1PRCksIEsgPSBuKm0sIHNwZWNpYWwtY2FzZSBLPTEgLT4gMC4KCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyB1MTI4ID0gX191aW50MTI4X3Q7CnVzaW5nIGkxMjggPSBfX2ludDEyOF90Owp1c2luZyB1bGwgPSB1bnNpZ25lZCBsb25nIGxvbmc7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKdWxsIG11bF9tb2RfdTEyOCh1bGwgYSwgdWxsIGIsIHVsbCBtb2QpewogICAgaWYobW9kID09IDApIHJldHVybiAwOwogICAgdTEyOCByZXMgPSAodTEyOClhICogKHUxMjgpYjsKICAgIHJlcyAlPSAodTEyOCltb2Q7CiAgICByZXR1cm4gKHVsbClyZXM7Cn0KCnVsbCBwb3cyX21vZChpMTI4IGV4cCwgdWxsIG1vZCl7CiAgICAvLyBjb21wdXRlIDJeZXhwICUgbW9kLCBleHAgPj0gMAogICAgaWYobW9kID09IDEpIHJldHVybiAwOwogICAgdWxsIGJhc2UgPSAyICUgbW9kOwogICAgdWxsIHJlcyA9IDEgJSBtb2Q7CiAgICB3aGlsZShleHAgPiAwKXsKICAgICAgICBpZigoZXhwICYgMSkgIT0gMCkgcmVzID0gbXVsX21vZF91MTI4KHJlcywgYmFzZSwgbW9kKTsKICAgICAgICBiYXNlID0gbXVsX21vZF91MTI4KGJhc2UsIGJhc2UsIG1vZCk7CiAgICAgICAgZXhwID4+PSAxOwogICAgfQogICAgcmV0dXJuIHJlczsKfQoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgbiwgbTsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBNT0Q7CiAgICBpZighKGNpbiA+PiBuID4+IG0gPj4gTU9EKSkgcmV0dXJuIDA7CiAgICBpMTI4IEsgPSAoaTEyOCluICogKGkxMjgpbTsgLy8gdXAgdG8gMWUxOCBzYWZlIGluIGkxMjgKCiAgICBpZihNT0QgPT0gMSl7CiAgICAgICAgY291dCA8PCAwIDw8ICdcbic7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgaWYoSyA9PSAxKXsKICAgICAgICBjb3V0IDw8IDAgJSBNT0QgPDwgJ1xuJzsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICAvLyBjb21wdXRlIHBvdyA9IDJeKEsrMikgJSBNT0QKICAgIGkxMjggZXhwID0gSyArIDI7CiAgICB1bGwgcG93MiA9IHBvdzJfbW9kKGV4cCwgTU9EKTsKCiAgICAvLyBjb21wdXRlIHRlcm0gPSAocG93MiAtICg0KksgKyA0KSkgbW9kIE1PRAogICAgLy8gY29tcHV0ZSA0KksgbW9kIE1PRAogICAgLy8gSyBtb2QgTU9EOgogICAgdWxsIEttb2QgPSAodWxsKSgodTEyOClLICUgKHUxMjgpTU9EKTsKICAgIHVsbCBmb3VySyA9IG11bF9tb2RfdTEyOCggKHVsbCk0ICUgTU9ELCBLbW9kLCBNT0QgKTsKCiAgICAvLyBzdWJ0cmFjdCBzYWZlbHk6CiAgICAvLyBhbnMgPSBwb3cyIC0gZm91cksgLSA0IChtb2QgTU9EKQogICAgbG9uZyBsb25nIHRtcCA9IDA7CiAgICAvLyBkbyBtb2R1bGFyIHN1YnRyYWN0aW9uIHVzaW5nIHVuc2lnbmVkIGFyaXRobWV0aWMKICAgIHVsbCBhbnM7CiAgICAvLyBjb21wdXRlIChwb3cyICsgTU9EIC0gZm91ckspICUgTU9EIGZpcnN0CiAgICBpZihwb3cyID49IGZvdXJLKSBhbnMgPSAocG93MiAtIGZvdXJLKSAlIE1PRDsKICAgIGVsc2UgYW5zID0gKE1PRCAtICgoZm91cksgLSBwb3cyKSAlIE1PRCkpICUgTU9EOwogICAgLy8gc3VidHJhY3QgNAogICAgaWYoYW5zID49ICh1bGwpNCkgYW5zID0gKGFucyAtIDQpICUgTU9EOwogICAgZWxzZSBhbnMgPSAoTU9EIC0gKCg0IC0gYW5zKSAlIE1PRCkpICUgTU9EOwoKICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7CiAgICByZXR1cm4gMDsKfQ==