← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

const MOD int64 = 998244353

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n, k int
	fmt.Fscan(in, &n, &k)

	m := n - 1

	choose := make([][]int64, m+1)
	for i := 0; i <= m; i++ {
		choose[i] = make([]int64, i+1)
		choose[i][0] = 1
		choose[i][i] = 1
		for j := 1; j < i; j++ {
			choose[i][j] = choose[i-1][j-1] + choose[i-1][j]
			if choose[i][j] >= MOD {
				choose[i][j] -= MOD
			}
		}
	}

	maxE := m * (m - 1) / 2
	pow := make([]int64, maxE+1)

	dp := make([]int64, m+1)
	ndp := make([]int64, m+1)
	dp[0] = 1

	for t := k; t >= 1; t-- {
		pow[0] = 1
		base := int64(t)
		for e := 1; e <= maxE; e++ {
			pow[e] = pow[e-1] * base % MOD
		}

		for i := 0; i <= m; i++ {
			ndp[i] = 0
		}

		for s := 0; s <= m; s++ {
			if dp[s] == 0 {
				continue
			}
			rem := m - s
			cur := dp[s]
			for c := 0; c <= rem; c++ {
				e := c*s + c*(c-1)/2
				val := cur * choose[rem][c] % MOD
				val = val * pow[e] % MOD
				ndp[s+c] += val
				if ndp[s+c] >= MOD {
					ndp[s+c] -= MOD
				}
			}
		}

		dp, ndp = ndp, dp
	}

	fmt.Fprint(out, dp[m])
}