#include <bits/stdc++.h>
using namespace std;
int const mod = 1e9 + 7;
int mul(int a, int b) {
  a %= mod;
  b %= mod;
  return (1LL * a * b) % mod;
}
int fpow(int a, int p) {
  if (!p) return 1;
  if (p & 1) return mul(a, fpow(a, p - 1));
  return fpow(mul(a, a), p >> 1);
}
int add(int a, int b) {
  a += b;
  if (a >= mod) a -= mod;
  if (a < 0) a += mod;
  return a;
}
int add_self(int &a, int b) { return a = add(a, b); }
int n, k;
int dp[300][300];
int cnt(int a, int b) { return add(add(mul(a, n), mul(b, n)), -mul(a, b)); }
int main() {
  cin >> n >> k;
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j <= i; j++) {
      if (!i || !j) {
        dp[i][j] = 1;
        continue;
      }
      add_self(dp[i][j], dp[i - 1][j - 1]);
      add_self(dp[i][j], dp[i - 1][j]);
    }
  }
  int ans = 0;
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j <= n; j++) {
      if (!i && !j) continue;
      add_self(ans, ((i + j) % 2 ? 1 : -1) * mul(mul(dp[n][i], dp[n][j]),
                                                 mul(fpow(k, n * n - cnt(i, j)),
                                                     fpow(k - 1, cnt(i, j)))));
    }
  }
  ans = add(fpow(k, mul(n, n)), -ans);
  cout << ans << endl;
  return 0;
}
