#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1e9 + 7;
long long int power(long long int a, long long int b) {
  if (!b) return 1LL;
  long long int temp = power(a, b / 2);
  temp = (temp * temp) % mod;
  if (b % 2) temp = (temp * a) % mod;
  return temp;
}
long long int fact[1000010], inv[1000010];
long long int solve(long long int n, long long int m, long long int a,
                    long long int b) {
  fact[0] = 1;
  for (int i = 1; i < 1000010; i++) fact[i] = (fact[i - 1] * i) % mod;
  for (int i = 0; i < 1000010; i++) inv[i] = power(fact[i], mod - 2);
  auto f = [&](long long int i, long long int j) -> long long int {
    if (j > i) return 0LL;
    long long int temp = fact[i];
    temp = (temp * inv[j]) % mod;
    temp = (temp * inv[i - j]) % mod;
    return temp;
  };
  long long int F[n + 1];
  for (int i = 0; i <= n; i++) {
    F[i] = (1LL * i * power(n, n - i)) % mod;
    F[i] = (F[i] * power(n, mod - 2)) % mod;
  }
  long long int ans = 0;
  for (int i = 1; i < n; i++) {
    long long int temp = (F[i + 1] * f(n - 2, i - 1)) % mod;
    temp = (temp * fact[i - 1]) % mod;
    temp = (temp * f(m - 1, i - 1)) % mod;
    temp = (temp * power(m, n - i - 1)) % mod;
    ans = (ans + temp + mod) % mod;
  }
  return ans;
}
int main() {
  long long int n, m, a, b;
  scanf("%lld %lld %lld %lld", &n, &m, &a, &b);
  if (n == 2) {
    printf("1\n");
  } else {
    printf("%lld\n", solve(n, m, a, b));
  }
  return 0;
}
