#include <bits/stdc++.h>
using namespace std;
long long cd, w, a, b, kq = 0, mod = 1e9 + 7, fact[1000001], sf[1000001],
                       p[1000001];
void inp() { cin >> cd >> w >> a >> b; }
long long bigmod(long long hat, long long base) {
  if (hat == 0) return 1;
  long long k = bigmod(hat / 2, base);
  if (hat % 2 == 1) return k * k % mod * base % mod;
  return k * k % mod;
}
void create() {
  p[0] = fact[0] = sf[0] = 1;
  for (long long i = 1; i <= 1000000; i++) {
    fact[i] = fact[i - 1] * i % mod;
    sf[i] = bigmod(mod - 2, fact[i]);
    p[i] = p[i - 1] * w % mod;
  }
}
long long C(long long k, long long n) {
  if (k > n) return 0;
  return fact[n] * sf[k] % mod * sf[n - k] % mod;
}
long long A(long long k, long long n) {
  if (k > n) return 0;
  return C(k, n) * fact[k] % mod;
}
long long cayley(long long k, long long n) {
  if (n == k) return 1;
  return k * bigmod(n - k - 1, n) % mod;
}
long long get(long long node) {
  return A(node, cd - 2) * cayley(node + 2, cd) % mod * p[cd - node - 2] % mod *
         C(node, w - 1) % mod;
}
void do_it() {
  create();
  for (long long i = 0; i <= cd - 2; i++) kq += get(i), kq %= mod;
  cout << kq;
}
int main() {
  inp();
  do_it();
}
