{1,2,3}所有前缀的总数应该是不超过n的,理论上开到N=20就够了,但为什么我开到21才能过
const int N = 21, Mod = 1e9 + 7;
int T, n, s;
long long dp[2][N][N][N][N][N][N];
for (int a = 0; a <= n; a++)
for (int b = 0; b <= n - a; b++)
for (int c = 0; c <= n - a - b; c++)
for (int d = 0; d <= n - a - b - c; d++)
for (int e = 0; e <= n - a - b - c - d; e++)
for (int f = 0; f <= n - a - b - c - d - e; f++) {
dp[i & 1][a][b][c][d][e][f] = 0;
if (s == 1 || s == 0) dp[i & 1][a][b][c][d][e][f] = (dp[i & 1][a][b][c][d][e][f] + (a == 0 ? 0 : dp[(i - 1) & 1][a - 1][b][c][d][e][f]) + (e == 0 ? 0 : (dp[(i - 1) & 1][a][b + 1][c][d][e - 1][f] * (b + 1)) % Mod) + (dp[(i - 1) & 1][a][b][c][d][e][f + 1] * (f + 1)) % Mod);
if (dp[i & 1][a][b][c][d][e][f] >= Mod) dp[i & 1][a][b][c][d][e][f] -= Mod;
if (dp[i & 1][a][b][c][d][e][f] >= Mod) dp[i & 1][a][b][c][d][e][f] %= Mod;
if (s == 2 || s == 0) dp[i & 1][a][b][c][d][e][f] = (dp[i & 1][a][b][c][d][e][f] + (b == 0 ? 0 : dp[(i - 1) & 1][a][b - 1][c][d][e][f]) + (f == 0 ? 0 : (dp[(i - 1) & 1][a][b][c + 1][d][e][f - 1] * (c + 1)) % Mod) + (dp[(i - 1) & 1][a][b][c][d + 1][e][f] * (d + 1)) % Mod);
if (dp[i & 1][a][b][c][d][e][f] >= Mod) dp[i & 1][a][b][c][d][e][f] -= Mod;
if (dp[i & 1][a][b][c][d][e][f] >= Mod) dp[i & 1][a][b][c][d][e][f] %= Mod;
if (s == 3 || s == 0) dp[i & 1][a][b][c][d][e][f] = (dp[i & 1][a][b][c][d][e][f] + (c == 0 ? 0 : dp[(i - 1) & 1][a][b][c - 1][d][e][f]) + (d == 0 ? 0 : (dp[(i - 1) & 1][a + 1][b][c][d - 1][e][f] * (a + 1)) % Mod) + (dp[(i - 1) & 1][a][b][c][d][e + 1][f] * (e + 1)) % Mod);
if (dp[i & 1][a][b][c][d][e][f] >= Mod) dp[i & 1][a][b][c][d][e][f] -= Mod;
if (dp[i & 1][a][b][c][d][e][f] >= Mod) dp[i & 1][a][b][c][d][e][f] %= Mod;
}