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 <bits/stdc++.h>
using namespace std;

int main() {
  const int D = 1e9 + 7;
  
  int N, M;
  cin >> N >> M;

  vector<int> fac(M + 1, 1); {
    for (int i = 1; i <= M; ++i) {
      fac[i] = (int64_t) fac[i - 1] * i % D;
    }
  }

  vector<int> ifac(M + 1); {
    auto inv = [D](int v) {
      int r = 1;
      for (int p = D - 2; p; p >>= 1) {
        if (p & 1) r = (int64_t) r * v % D;
        v = (int64_t) v * v % D;
      }
      return r;
    };
    ifac[M] = inv(fac[M]);
    for (int i = M; i; --i) {
      ifac[i - 1] = (int64_t) ifac[i] * i % D;
    }
    assert(ifac[0] == 1);
  };

  int res = 0;
  for (int k = 0; k <= N; ++k) {
    int s = k & 1 ? -1 : 1;
    int c = (int64_t) fac[N] * ifac[k] % D * ifac[N - k] % D;
    int p = (int64_t) fac[M] * ifac[M - k] % D;
    int q = (int64_t) fac[M - k] * ifac[(M - k) - (N - k)] % D;
    (res += (int64_t) s * c % D * p % D * q % D * q % D) %= D;
  }

  if (res < 0) res += D;
  cout << res << endl;

  return 0;
}