Language: C++

#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
#include <map>
#include <algorithm>
#include <string>
#include <utility>
#include <set>
#include <stack>
#include <deque>
#include <ctime>
#include <random>
#include <cassert>
#include <cmath>
#include <climits>
#include <queue>
#include <cstring>
#include <bitset>
#include <iomanip>
#include <chrono>

/*
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("popcnt")
#pragma GCC target("avx2")
*/


#ifdef LOCAL
	#define dbg(x) cout << #x << " : " << x << endl;
#else 
	#define dbg(x)
#endif

#define int long long
#define pb push_back
#define ppb pop_back()
#define mp make_pair
#define fi(a,b) for (int i=a;i<b;i++)
#define fj(a,b) for (int j=a;j<b;j++)
#define fk(a,b) for (int k=a;k<b;k++)
#define fi1(a,b) for (int i=a-1;i>=b;i--)
#define fj1(a,b) for (int j=a-1;j>=b;j--)
#define fk1(a,b) for (int k=a-1;k>=b;k--)
#define fx(x,a) for (auto& x : a)
#define rep(i, a, b) for (int i = a; i < b; ++i)
#define rep1(i, a, b) for (int i = a - 1; i >= b; --i)
#define siz(x) (int)x.size()
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()

using namespace std;

template<typename T1, typename T2>inline void mine(T1 &x, T2 y) { if (x > y) x = y; }
template<typename T1, typename T2>inline void maxe(T1 &x, T2 y) { if (x < y) x = y; }

ostream& operator << (ostream &a, const vector<int> &b) {
    for (auto k : b) cout << k << ' ';
    return a;
}


typedef long long ll;
typedef unsigned long long ull;
typedef char ch;
typedef string str;
typedef pair<int, int> pii;
typedef map<int, int> mii;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<pii> vpii;
typedef vector<vpii> vvpii;
typedef vector<ch> vch;
typedef vector<vch> vvch;
typedef vector<str> vs;



const int MOD = 1000000007;
const int INF = 1000000050;
const long long BIG = (long long)2e18 + 50;
const int MX = 500010;
const double EPS = 1e-9;


mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int pw(int a, int b) {
	if (!b) return 1;
	int res = pw(a, b / 2);
	res = res * res % MOD;
	if (b & 1)
		res = res * a % MOD;
	return res;
} 
int f[MX];
int f1[MX];

int C(int n, int k) {
	if (k < 0 || k > n)
		return 0;
	return f[n] * f1[k] % MOD * f1[n - k] % MOD;
}

int A(int n, int k) {
	if (k < 0 || k > n)
		return 0;
	return f[n] * f1[n - k] % MOD;
}

int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
   	
   	f[0] = 1;
   	fi(1, MX)
   		f[i] = f[i - 1] * i % MOD;
   	f1[MX - 1] = pw(f[MX - 1], MOD - 2);
   	fi1(MX - 1, 0)
   		f1[i] = f1[i + 1] * (i + 1) % MOD;
   	int n, m;
   	cin >> n >> m;w
   	int res = A(m, n) * A(m, n) % MOD;
   	dbg(res);
   	fi(1, n + 1) {
   		int d = C(n, i) * A(m, i) % MOD * pw(A(m - i, n - i), 2) % MOD;
   		if (i % 2) {
   			res -= d;
   		} else {
   			res += d;
   		}
   		dbg(res);
   	}  
   	res += MOD * MOD;
   	cout << res % MOD << '\n';
}

Compiler output:
a.cc: In function 'int32_t main()':
a.cc:127:23: error: 'w' was not declared in this scope
  127 |         cin >> n >> m;w
      |                       ^
a.cc:133:25: error: 'res' was not declared in this scope; did you mean 'rep'?
  133 |                         res -= d;
      |                         ^~~
      |                         rep
a.cc:135:25: error: 'res' was not declared in this scope; did you mean 'rep'?
  135 |                         res += d;
      |                         ^~~
      |                         rep
a.cc:139:9: error: 'res' was not declared in this scope; did you mean 'rep'?
  139 |         res += MOD * MOD;
      |         ^~~
      |         rep