#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000 * 1000 * 1000 + 7;
const long long MAXN = 250 + 7;
long long n, k, dp[MAXN][MAXN], c[MAXN][MAXN], pk[MAXN], pk_1[MAXN];
long long mul(long long a, long long b) {
  return ((a % MOD) * (b % MOD)) % MOD;
}
long long add(long long a, long long b) {
  return (((a % MOD) + (b % MOD)) % MOD + MOD) % MOD;
}
long long Pow(long long a, long long b) {
  if (b == 0) return 1ll;
  long long x = Pow(a, b / 2);
  x *= x;
  x %= MOD;
  if (b % 2) x *= a;
  return x % MOD;
}
int32_t main() {
  ios_base::sync_with_stdio(0), cin.tie(nullptr), cout.tie(nullptr);
  cin >> n >> k;
  for (long long i = 0; i < MAXN; i++) c[i][0] = 1;
  for (long long i = 1; i < MAXN; i++) {
    for (long long j = 1; j < MAXN; j++) {
      c[i][j] = add(c[i - 1][j], c[i - 1][j - 1]);
    }
  }
  pk[0] = pk_1[0] = 1;
  for (long long i = 1; i < MAXN; i++) {
    pk[i] = mul(pk[i - 1], k);
    pk_1[i] = mul(pk_1[i - 1], k - 1);
  }
  dp[0][0] = 1;
  for (long long i = 1; i <= n; i++) {
    for (long long j = 0; j <= n; j++) {
      for (long long t = 0; t <= j; t++) {
        long long val = pk[t];
        if (j == t) val -= pk_1[t];
        dp[i][j] = add(dp[i][j], mul(mul(dp[i - 1][t], c[n - t][j - t]),
                                     mul(pk_1[n - j], val)));
      }
    }
  }
  cout << dp[n][n] << endl;
  return 0;
}
