图解:
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 5005;
LL c[N][N];
LL qmi(LL a, LL b, int p)
{
LL res = 1 % p;
while (b)
{
if (b & 1) res = res * a % p;
a = a * (LL)a % p;
b >>= 1;
}
return res;
}
int main()
{
LL n, m, q;
cin>>n>>m>>q;
for(int i=0;i<=n;i++)
{
c[i][0] = 1, c[i][i] = 1;
for(int k=1;k<i;k++)
{
c[i][k] = c[i-1][k] + c[i-1][k-1];
c[i][k] %= q;
}
}
LL ans = 0;
for(LL i=1;i<=n;i++)
{
LL t1 = qmi(2, i, q) - 1;
LL t2 = qmi(t1, m - 1, q);
LL t3 = qmi(2, (n - i)*(m - 1), q);
ans += t2 % q * t3 % q * c[n][i] % q;
ans %= q;
}
cout<<ans<<endl;
return 0;
}