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 Go (1.14.1) (judge verdict: Accepted)

package main

import (
	"fmt"
)

const mod = int64(1e9 + 7)
const max = int64(5e5 + 5)
func mul(a , b int64) int64 {
	return (mod+(a*b)%mod)%mod
}

func sum(a , b int64) int64 {
	return (mod+(a+b)%mod)%mod
}

func power(a, b int64) int64 {

	x := int64(1)

	for b>0{
		if b%2 == 1{
			x = mul(x, a)
		}
		a = mul(a, a)
		b = b/2
	}
	return x
}

var fact [max]int64

func factorial()  {
	fact[0] = 1
	for i := int64(1);i<max;i++{
		fact[i] = mul(i, fact[i-1])
	}
}

func permutation(n,p int64) int64  {
	return mul(fact[n], power(fact[n-p], mod-2))
}

func combination(n, p int64) int64  {
	return mul(permutation(n,p), power(fact[p], mod-2))
}

func main() {

	factorial()

	var n,m int64
	fmt.Scan(&n, &m)
	ans := permutation(m, n)
	cur := int64(0)
	for i := int64(0);i<=n;i++{
		cur = sum(cur, mul(power(int64(-1),i),mul(combination(n, i), permutation(m-i, n-i))))
	}
	ans = mul(ans, cur)
	fmt.Printf("%v", ans)
}