#define MD 998244353 using mm = Mint; ll @N; int @K, @m; VI bst(K + 1, -1); // bst[r] := \max_{R_i = r} L_i VI g(K + 1, -1); // g[r] := \max_{R_i <= r} L_i rep(m) { int @L, @R; bst[R] >?= L; } rep(i, 1, K + 1) g[i] = max(bst[i], g[i - 1]); // bst[i] 前缀最大刚好是 g[i] vector> f(K + 1, vector(K + 1, 0)), pre(K + 1, vector(K + 1, 0)); f[0][0] = 1; pre[0][0] = 1; rep(i, 1, K + 1) pre[0][i] = pre[0][i - 1] + f[0][i]; rep(s, 1, K + 1) { rep(x, 1, K + 1) { f[s][x] = pre[s - 1][x - 1]; if(g[x - 1] > 0) f[s][x] -= pre[s - 1][g[x - 1] - 1]; } rep(x, 1, K + 1) pre[s][x] = pre[s][x - 1] + f[s][x]; } vector H(K + 1, 0); rep(s, 1, K + 1) rep(x, g[K], K + 1) H[s] += f[s][x]; vector F(K + 1, 0); // F(N, s) = s! * {N, s} Comb comb; rep(s, 1, K + 1) { rep(j, s + 1) { mm tt = 1; tt *= (-1) ** (s - j); tt *= comb.C(s, j); tt *= powmod(j, N, MD); F[s] += tt; } } mm ans = 0; rep(s, K + 1) ans += H[s] * F[s]; wt(ans);