#include <cstdio>
#include <memory.h>
using namespace std;
const int N = 305;
int C[N][N];
const int MOD = 1000 * 1000 * 1000 + 7;
typedef long long llong;
inline int add(int x, int y) {
return (x + y) % MOD;
}
inline int mul(int a, int b) {
return (((llong)a) * b) % MOD;
}
llong D[N][N];
llong pD[N][N];
void init() {
for (int n = 0; n < N; n++) {
C[n][0] = C[n][n] = 1;
for (int k = 1; k < n; k++)
C[n][k] = add(C[n - 1][k - 1], C[n - 1][k]);
}
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
init();
D[1][1] = 1;
for (int i = 1; i < m; i++) {
memcpy(pD, D, sizeof(D));
for (int b = 0; b <= n; b++)
for (int a = b; a <= n; a++)
D[b][a] = 0;
for (int b = 1; b <= n; b++) {
for (int a = b; a <= n; a++) {
int val = pD[b][a];
if (a + 1 <= n)
D[b + 1][a + 1] = add(D[b + 1][a + 1], mul(val, n - a));
if (a + 1 <= n)
D[b][a + 1] = add(D[b][a + 1], mul(val, n - a));
if (b >= 2)
D[b - 1][a] = add(D[b - 1][a], mul(val, b));
D[b][a] = add(D[b][a], mul(val, b));
}
}
}
int ans = D[1][n];
printf("%d\n", ans);
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:34:27: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d", &n, &m);
^