Problem:
Score : 500 points

Problem Statement

Count the pairs of length-N sequences consisting of integers between 1 and M (inclusive), A_1, A_2, \cdots, A_{N} and B_1, B_2, \cdots, B_{N}, that satisfy all of the following conditions:

A_i \neq B_i, for every i such that 1\leq i\leq N.

A_i \neq A_j and B_i \neq B_j, for every (i, j) such that 1\leq i < j\leq N.

Since the count can be enormous, print it modulo (10^9+7).

Constraints

1\leq N \leq M \leq 5\times10^5

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N M

Output

Print the count modulo (10^9+7).

Sample Input 1

2 2

Sample Output 1

2

A_1=1,A_2=2,B_1=2,B_2=1 and A_1=2,A_2=1,B_1=1,B_2=2 satisfy the conditions.

Sample Input 2

2 3

Sample Output 2

18

Sample Input 3

141421 356237

Sample Output 3

881613484

Solution in C++ (GCC 9.2.1) (judge verdict: Accepted)

#include <stdio.h>

#define MOD 1000000007

typedef long long ll;

ll fct[500005] = { 1, 1 }, inv[500005] = { 1, 1 }, fiv[500005] = { 1, 1 };

ll combination(ll n, ll r)
{
	return fct[n] * fiv[r] % MOD * fiv[n - r] % MOD;
}

ll permutation(ll n, ll r)
{
	return fct[n] * fiv[n - r] % MOD;
}

int main(void)
{
	ll n, m, i, ans = 0;
	
	scanf("%lld %lld", &n, &m);

	for (i = 2; i <= m; i++)
	{
		fct[i] = fct[i - 1] * i % MOD;
		inv[i] = inv[MOD % i] * (MOD - MOD / i) % MOD;
		fiv[i] = fiv[i - 1] * inv[i] % MOD;
	}

	for (i = 0; i <= n; i++)
	{
		ll p = combination(n, i) * permutation(m, i) % MOD * permutation(m - i, n - i) % MOD * permutation(m - i, n - i) % MOD;
		
		if (i % 2)
			ans = (ans - p + MOD * (ll)1e8) % MOD;
		else
			ans = (ans + p) % MOD;
	}

	printf("%lld", ans);
	return 0;
}