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: Wrong Answer)

// In the name of god
#include <bits/stdc++.h>
#pragma GCC optimze("02")
using namespace std;
using ll = long long;
const ll maxn=5e5+5,mod=1e9+7;
ll n,m,f[maxn],a[maxn],b[maxn],b2[maxn],ans,xx;
ll poww(ll a, ll b, ll md) {
    return (!b ? 1 : (b & 1 ? a * poww(a * a % md, b / 2, md) % md : poww(a * a % md, b / 2, md) % md));
}
ll entekhab(ll x,ll y){
	if(y>x){
		return 0;
	}
	return f[x]%mod*poww(f[y],mod-2,mod)%mod*poww(f[x-y],mod-2,mod)%mod;
}
int main(){
	ios::sync_with_stdio(false) , cin.tie(0) , cout.tie(0);
	cin>>n>>m;
	f[0]=1;
	for(int i=1;i<=m;i++)f[i]=f[i-1]*i%mod;
	a[0]=1;
	a[1]=m-1;
	b[0]=1;
	b[1]=1;
	b2[1]=1;
	for(int i=2;i<=n;i++){
		b[i]=(a[i-1]-b[i-1]+100*mod)%mod;
		b2[i]+=b[i-1]+b2[i-1];
		a[i]=((b2[i-1]*(m-(i-1)))%mod+(b2[i]+100*mod)%mod*(m-i)%mod+mod*1000)%mod;
	}
	ans=a[n];
	ans=(ans*entekhab(m,n)%mod*f[n]%mod)%mod;
	cout<<ans;
}