1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
using namespace std;
const int N = 3e3 + 9;
const long long MOD = 1e9 + 7;
long long dp1[N][N];
long long dp2[N][N];
long long n,m;

int main(){
	cin >> n >> m;
	dp1[1][1] = m;
	for(long long i=2; i<=n; i++){
		for(long long k=1; k<=n; k++){
			dp1[i][k] = (dp1[i-1][k] * (m-k) + dp2[i-1][k-1] * (m-k+1)) % MOD;
			dp2[i][k] = (dp1[i-1][k] * k + dp2[i-1][k] * k) % MOD;
		}
	}
	long long wynik = 0;
	for(int i=0; i<=n; i++)
		wynik = (wynik + dp2[n][i]) % MOD;
	cout << wynik << "\n";
}