很裸的$dp+$组合计数
注意
注意
注意
$BZOJ$不要用玄学优化
$CE$不管$qwq$
/**************************************************************
Problem: 1801
User: zhangheran
Language: C++
Result: Accepted
Time:196 ms
Memory:11692 kb
****************************************************************/ //#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("inline")
//#pragma GCC optimize("-fgcse")
//#pragma GCC optimize("-fgcse-lm")
//#pragma GCC optimize("-fipa-sra")
//#pragma GCC optimize("-ftree-pre")
//#pragma GCC optimize("-ftree-vrp")
//#pragma GCC optimize("-fpeephole2")
//#pragma GCC optimize("-ffast-math")
//#pragma GCC optimize("-fsched-spec")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("-falign-jumps")
//#pragma GCC optimize("-falign-loops")
//#pragma GCC optimize("-falign-labels")
//#pragma GCC optimize("-fdevirtualize")
//#pragma GCC optimize("-fcaller-saves")
//#pragma GCC optimize("-fcrossjumping")
//#pragma GCC optimize("-fthread-jumps")
//#pragma GCC optimize("-funroll-loops")
//#pragma GCC optimize("-fwhole-program")
//#pragma GCC optimize("-freorder-blocks")
//#pragma GCC optimize("-fschedule-insns")
//#pragma GCC optimize("inline-functions")
//#pragma GCC optimize("-ftree-tail-merge")
//#pragma GCC optimize("-fschedule-insns2")
//#pragma GCC optimize("-fstrict-aliasing")
//#pragma GCC optimize("-fstrict-overflow")
//#pragma GCC optimize("-falign-functions")
//#pragma GCC optimize("-fcse-skip-blocks")
//#pragma GCC optimize("-fcse-follow-jumps")
//#pragma GCC optimize("-fsched-interblock")
//#pragma GCC optimize("-fpartial-inlining")
//#pragma GCC optimize("no-stack-protector")
//#pragma GCC optimize("-freorder-functions")
//#pragma GCC optimize("-findirect-inlining")
//#pragma GCC optimize("-fhoist-adjacent-loads")
//#pragma GCC optimize("-frerun-cse-after-loop")
//#pragma GCC optimize("inline-small-functions")
//#pragma GCC optimize("-finline-small-functions")
//#pragma GCC optimize("-ftree-switch-conversion")
//#pragma GCC optimize("-foptimize-sibling-calls")
//#pragma GCC optimize("-fexpensive-optimizations")
//#pragma GCC optimize("-funsafe-loop-optimizations")
//#pragma GCC optimize("inline-functions-called-once")
//#pragma GCC optimize("-fdelete-null-pointer-checks")
//#include"suqingnian.h"
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int mod=;
long long dp[][][];
int n,m;long long ans;
long long calc(long long xx) {return xx*(xx-)/;}
int main()
{
scanf("%d%d",&n,&m);
dp[][][]=;
for(int i=;i<n;i++)
for(int j=;j<=m;j++)
for(int k=;k<=m-j;k++)
if(dp[i][j][k]){
if(j->=) dp[i+][j-][k+]=(dp[i+][j-][k+]+dp[i][j][k]*calc(j))%mod;
if(j->=) dp[i+][j-][k+]=(dp[i+][j-][k+]+dp[i][j][k]*j)%mod;
dp[i+][j][k]=(dp[i+][j][k]+dp[i][j][k])%mod,
dp[i+][j][k+]=(dp[i+][j][k+]+dp[i][j][k]*(m-j-k)*j)%mod,
dp[i+][j+][k]=(dp[i+][j+][k]+dp[i][j][k]*(m-j-k))%mod,
dp[i+][j+][k]=(dp[i+][j+][k]+dp[i][j][k]*calc(m-j-k))%mod;
// printf("%d %d %d %d\n",i,j,k,dp[i][j][k]);
}
for(int i=;i<=m;i++)
for(int j=;j<=m-i;j++)
// printf("%lld ",dp[n][i][j]);
ans=(ans+dp[n][i][j])%mod;
printf("%lld\n",ans%mod);
}