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 PyPy3 (7.3.0) (judge verdict: Accepted)

import sys
N, M = map(int, input().split())
mod = 7 + 10 ** 9

fact = [1] * (N + 1)
for i in range(1, N + 1): fact[i] = (fact[i-1] * i) % mod
revfact = [1] * (N + 1)
revfact[N] = pow(fact[N], mod - 2, mod)
for i in reversed(range(1, N)): revfact[i] = ((i+1) * revfact[i+1]) % mod

def comb(n, k): return (fact[n] * revfact[n-k] * revfact[k]) % mod

def solve():
      Perm = [1] * (N + 1) #M-iPN-i
      P = 1
      for i in reversed(range(N)): 
            Perm[i] = ((M - i) * Perm[i + 1]) % mod

      Ans = pow(Perm[i], 2, mod)

      for i in range(1, N + 1):
            P *= (M - i + 1)
            P %= mod
            Ans += pow(-1, i % 2) * (comb(N, i) * P * pow(Perm[i], 2, mod)) % mod
            Ans %= mod

      print(Ans)
      #print(Perm)
      return 0

if __name__ == "__main__":
      solve()