#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0;
  char zf = 1;
  char ch = getchar();
  while (ch != '-' && !isdigit(ch)) ch = getchar();
  if (ch == '-') zf = -1, ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return x * zf;
}
void write(long long y) {
  if (y < 0) putchar('-'), y = -y;
  if (y > 9) write(y / 10);
  putchar(y % 10 + 48);
}
void writeln(const long long y) {
  write(y);
  putchar('\n');
}
int k, m, n, x, y, z, cnt, ans;
int jc[1000010], njc[1000010];
int ksm(int x, int y = 1000000007 - 2) {
  int ans = 1;
  for (register int i = y; i; i >>= 1, x = 1ll * x * x % 1000000007)
    if (i & 1) ans = 1ll * ans * x % 1000000007;
  return ans;
}
int C(int x, int y) {
  return 1ll * jc[x] * njc[y] % 1000000007 * njc[x - y] % 1000000007;
}
int main() {
  n = read();
  m = read();
  read();
  read();
  int M = max(n, m) + 1;
  jc[0] = jc[1] = njc[0] = njc[1] = 1;
  for (register int i = 2; i <= M; i++)
    jc[i] = 1ll * jc[i - 1] * i % 1000000007;
  njc[M] = ksm(jc[M]);
  for (register int i = M - 1; i >= 1; i--)
    njc[i] = 1ll * njc[i + 1] * (i + 1) % 1000000007;
  long long ans = 0;
  const int invn = ksm(n), invm = ksm(m);
  for (register int i = 2, mi1 = ksm(n, n - 2), mi2 = ksm(m, n - 1);
       i <= m + 1 && i <= n; i++) {
    mi1 = 1ll * mi1 * invn % 1000000007;
    mi2 = 1ll * mi2 * invm % 1000000007;
    int fas = C(m - 1, i - 2), s = (i == n) ? 1 : 1ll * mi1 * i % 1000000007;
    (ans += 1ll * fas * s % 1000000007 * mi2 % 1000000007 * jc[n - 2] %
            1000000007 * njc[n - i] % 1000000007) %= 1000000007;
  }
  cout << ans;
  return 0;
}
