#include <bits/stdc++.h>
const int N = 250;
const int MOD = 1e9 + 7;
int n, k, p[N + 5], q[N + 5], c[N + 5][N + 5], f[N + 5][N + 5];
void add(int &x, int y) { (x += y) >= MOD && (x -= MOD); }
void sub(int &x, int y) { (x -= y) < 0 && (x += MOD); }
int add(int x) { return x >= MOD ? x - MOD : x; }
int sub(int x) { return x < 0 ? x + MOD : x; }
void init(int n) {
  p[0] = q[0] = c[0][0] = 1;
  for (int i = 1; i <= n; i++) {
    p[i] = 1LL * p[i - 1] * k % MOD;
    q[i] = 1LL * q[i - 1] * (k - 1) % MOD;
    c[i][0] = 1;
    for (int j = 1; j <= i; j++) {
      c[i][j] = add(c[i - 1][j] + c[i - 1][j - 1]);
    }
  }
}
int main() {
  scanf("%d%d", &n, &k);
  init(n);
  f[0][0] = 1;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      for (int k = 0; k <= j; k++) {
        if (j == k) {
          add(f[i][j],
              1LL * f[i - 1][k] * sub(p[j] - q[j]) % MOD * q[n - j] % MOD);
        } else {
          add(f[i][j], 1LL * f[i - 1][k] * p[k] % MOD * c[n - k][j - k] % MOD *
                           q[n - j] % MOD);
        }
      }
    }
  }
  printf("%d\n", f[n][n]);
  return 0;
}
