#include <bits/stdc++.h>
#pragma warning(disable : 4996)
const int maxn(1e3);
const int mod(1e9 + 7);
using namespace std;
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= mod;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
long long T, m, k, n;
long long fac[maxn];
long long invfac[maxn];
void init() {
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % mod;
  invfac[n] = powmod(fac[n], mod - 2);
  for (int i = n - 1; i >= 0; i--) invfac[i] = invfac[i + 1] * (i + 1) % mod;
}
inline long long combi(int k, int n) {
  return k > n ? 0 : 1LL * fac[n] * invfac[k] % mod * invfac[n - k] % mod;
}
long long solve() {
  cin >> n >> k;
  init();
  long long sum = 0;
  for (int i = 0; i <= n; ++i) {
    for (int j = 0; j <= n; ++j) {
      int tmp;
      if ((i + j) % 2) {
        tmp = -1;
      } else {
        tmp = 1;
      }
      sum += tmp * combi(i, n) % mod * combi(j, n) % mod *
             powmod(k - 1, n * i + n * j - i * j) % mod *
             powmod(k, n * n - (n * i + n * j - i * j)) % mod;
      sum %= mod;
      if (sum < 0) sum += mod;
    }
  }
  return sum;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout << solve() << '\n';
}
