#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pb push_back
#define MOD 1000000007LL
#define F first
#define S second
#define ll long long
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
ll gcd(ll a, ll b)
{
if(a == 0LL)
return b;
return gcd(b, a%b);
}
const int N = 2003;
ll pw2_m[N], pw_m[N], ifact[N], fact[N];
ll dp[N][N], pw_inv[N][N];
ll modx(ll base, ll ex)
{
ll ans = 1LL, val = base;
while(ex > 0LL)
{
if(ex&1LL)
ans = (ans*val)%MOD;
val = (val*val)%MOD;
ex = ex>>1LL;
}
return ans;
}
int main()
{
// clock_t clk;
// clk = clock();
// freopen("in8.in", "r", stdin);
// freopen("out8.out", "w", stdout);
int n, cnt;
ll m, temp;
scanf("%d", &n);
scanf("%lld", &m);
pw2_m[0] = pw_m[0] = fact[0] = ifact[0] = 1LL;
for(int i = 1; i<=n; i++)
{
pw_m[i] = (pw_m[i-1]*m)%MOD;
pw2_m[i] = (pw_m[i]*pw_m[i])%MOD;
fact[i] = (fact[i-1]*((ll)i))%MOD;
ifact[i] = modx(fact[i], MOD-2LL);
pw_inv[i][0] = 1LL;
pw_inv[i][1] = modx(i, MOD-2LL);
for(int j = 1; j<=n; j++)
pw_inv[i][j] = (pw_inv[i][j-1]*pw_inv[i][1])%MOD;
}
// dp[i][j] -> i numbers are selected and max permutation cycle is of length j
for(int i = 0; i<=n; i++)
dp[0][i] = 1LL;
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=n; j++)
{
dp[i][j] = dp[i][j-1];
cnt = 0;
for(int k = j; k<=i; k+=j)
{
cnt++;
temp = (dp[i-k][j-1]*pw_inv[j][cnt])%MOD;
temp = (temp*ifact[cnt])%MOD;
if(j&1) // Odd permutation cycle
temp = (temp*pw_m[cnt])%MOD;
else
temp = (temp*pw2_m[cnt])%MOD;
dp[i][j] = (dp[i][j] + temp)%MOD;
}
}
}
printf("%lld\n", (dp[n][n]*fact[n])%MOD);
// printf("%.9Lf\n", ((long double)(clock() - clk))/CLOCKS_PER_SEC);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBNT0QgMTAwMDAwMDAwN0xMCiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCiNkZWZpbmUgbGwgbG9uZyBsb25nCiAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CnR5cGVkZWYgcGFpcjxsbCwgbGw+IHBsbDsKIApsbCBnY2QobGwgYSwgbGwgYikKewogICAgaWYoYSA9PSAwTEwpCiAgICAgICAgcmV0dXJuIGI7CiAgICByZXR1cm4gZ2NkKGIsIGElYik7Cn0KIApjb25zdCBpbnQgTiA9IDIwMDM7CmxsIHB3Ml9tW05dLCBwd19tW05dLCBpZmFjdFtOXSwgZmFjdFtOXTsKbGwgZHBbTl1bTl0sIHB3X2ludltOXVtOXTsKIApsbCBtb2R4KGxsIGJhc2UsIGxsIGV4KQp7CiAgICBsbCBhbnMgPSAxTEwsIHZhbCA9IGJhc2U7CiAgICB3aGlsZShleCA+IDBMTCkKICAgIHsKICAgICAgICBpZihleCYxTEwpCiAgICAgICAgICAgIGFucyA9IChhbnMqdmFsKSVNT0Q7CiAgICAgICAgdmFsID0gKHZhbCp2YWwpJU1PRDsKICAgICAgICBleCA9IGV4Pj4xTEw7CiAgICB9CiAgICByZXR1cm4gYW5zOwp9CiAKaW50IG1haW4oKQp7ICAgCiAgICAvLyBjbG9ja190IGNsazsKICAgIC8vIGNsayA9IGNsb2NrKCk7CiAKICAgIC8vIGZyZW9wZW4oImluOC5pbiIsICJyIiwgc3RkaW4pOwogICAgLy8gZnJlb3Blbigib3V0OC5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICAKICAgIGludCBuLCBjbnQ7CiAgICBsbCBtLCB0ZW1wOwogCiAgICBzY2FuZigiJWQiLCAmbik7CiAgICBzY2FuZigiJWxsZCIsICZtKTsKIAogICAgcHcyX21bMF0gPSBwd19tWzBdID0gZmFjdFswXSA9IGlmYWN0WzBdID0gMUxMOwogICAgZm9yKGludCBpID0gMTsgaTw9bjsgaSsrKQogICAgewogICAgICAgIHB3X21baV0gPSAocHdfbVtpLTFdKm0pJU1PRDsKICAgICAgICBwdzJfbVtpXSA9IChwd19tW2ldKnB3X21baV0pJU1PRDsKICAgICAgICBmYWN0W2ldID0gKGZhY3RbaS0xXSooKGxsKWkpKSVNT0Q7CiAgICAgICAgaWZhY3RbaV0gPSBtb2R4KGZhY3RbaV0sIE1PRC0yTEwpOwogCiAgICAgICAgcHdfaW52W2ldWzBdID0gMUxMOwogICAgICAgIHB3X2ludltpXVsxXSA9IG1vZHgoaSwgTU9ELTJMTCk7CiAgICAgICAgZm9yKGludCBqID0gMTsgajw9bjsgaisrKQogICAgICAgICAgICBwd19pbnZbaV1bal0gPSAocHdfaW52W2ldW2otMV0qcHdfaW52W2ldWzFdKSVNT0Q7CiAgICB9CiAKICAgIC8vIGRwW2ldW2pdIC0+IGkgbnVtYmVycyBhcmUgc2VsZWN0ZWQgYW5kIG1heCBwZXJtdXRhdGlvbiBjeWNsZSBpcyBvZiBsZW5ndGggagogICAgZm9yKGludCBpID0gMDsgaTw9bjsgaSsrKQogICAgICAgIGRwWzBdW2ldID0gMUxMOwogCiAgICBmb3IoaW50IGkgPSAxOyBpPD1uOyBpKyspCiAgICB7CiAgICAgICAgZm9yKGludCBqID0gMTsgajw9bjsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgZHBbaV1bal0gPSBkcFtpXVtqLTFdOwogICAgICAgICAgICBjbnQgPSAwOwogICAgICAgICAgICBmb3IoaW50IGsgPSBqOyBrPD1pOyBrKz1qKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjbnQrKzsKIAogICAgICAgICAgICAgICAgdGVtcCA9IChkcFtpLWtdW2otMV0qcHdfaW52W2pdW2NudF0pJU1PRDsKICAgICAgICAgICAgICAgIHRlbXAgPSAodGVtcCppZmFjdFtjbnRdKSVNT0Q7CiAKICAgICAgICAgICAgICAgIGlmKGomMSkgLy8gT2RkIHBlcm11dGF0aW9uIGN5Y2xlCiAgICAgICAgICAgICAgICAgICAgdGVtcCA9ICh0ZW1wKnB3X21bY250XSklTU9EOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHRlbXAgPSAodGVtcCpwdzJfbVtjbnRdKSVNT0Q7CiAKICAgICAgICAgICAgICAgIGRwW2ldW2pdID0gKGRwW2ldW2pdICsgdGVtcCklTU9EOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogCiAgICBwcmludGYoIiVsbGRcbiIsIChkcFtuXVtuXSpmYWN0W25dKSVNT0QpOwogCiAgICAvLyBwcmludGYoIiUuOUxmXG4iLCAoKGxvbmcgZG91YmxlKShjbG9jaygpIC0gY2xrKSkvQ0xPQ0tTX1BFUl9TRUMpOwogCiAgICByZXR1cm4gMDsKfSAg