#include <bits/stdc++.h>
using namespace std;
const unsigned long long hash1 = 201326611;
const double eps = 1e-8;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const int inf = 0x3f3f3f3f;
const long long mod = 1e9 + 7;
const int N = 255;
const int M = 12;
const int dif = 26;
const double PI = acos(-1.0);
inline void Mod(long long& x) {
  if (x >= mod) x -= mod;
}
void BinaryBitset(int n) { cout << bitset<sizeof(int) * 4>(n) << endl; }
int n, m;
long long c[N][N], m0[N], m1[N], dp[N][N];
void init(int n) {
  m0[0] = m1[0] = 1;
  for (int i = 1; i <= n; i++) {
    m0[i] = m0[i - 1] * m % mod;
    m1[i] = m1[i - 1] * (m - 1) % mod;
  }
  c[1][0] = 1;
  c[1][1] = 1;
  c[0][0] = 1;
  for (int i = 1; i <= n; i++) c[i][0] = 1, c[i][i] = 1;
  for (int i = 2; i <= n; i++) {
    for (int j = 1; j < n; j++) {
      c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  init(n);
  for (int i = 1; i <= n; i++) dp[1][i] = c[n][i] * m1[n - i] % mod;
  for (int i = 2; i <= n; i++) {
    for (int j = 0; j <= n; j++) {
      for (int k = 0; k <= j; k++) {
        dp[i][j] = (dp[i][j] + c[n - k][j - k] * dp[i - 1][k] % mod *
                                   m1[n - j] % mod * m0[k] % mod) %
                   mod;
        if (j == k)
          dp[i][j] =
              ((dp[i][j] - m1[n] * dp[i - 1][k] % mod + mod) % mod + mod) % mod;
      }
    }
  }
  printf("%lld\n", dp[n][n]);
}
