Submission
Status:
(PPPPPPPPPP)(PPPPP)(PPPPP)(PPPPPPPPPP)
Subtask/Task Score:
{20/20}{30/30}{30/30}{20/20}
Score: 100
User: mantaggez
Problemset: กองไฟ
Language: cpp
Time: 0.006 second
Submitted On: 2026-03-23 13:04:29
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll nx = 155;
const ll fx = 55;
const ll MOD = 1e9+7;
ll n, a, b, c;
ll dp[4][4][fx][fx][fx];
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin >> n >> a >> b >> c;
ll half = n / 2;
if(a > half || b > half || c > half) {
cout << 0 << '\n';
return 0;
}
if(a > 0)
dp[1][1][1][0][0] = 1;
if(b > 0)
dp[2][2][0][1][0] = 1;
if(c > 0)
dp[3][3][0][0][1] = 1;
for(ll i=1;i<=3;i++) {
for(ll j=0;j<=a;j++) {
for(ll k=0;k<=b;k++) {
for(ll m=0;m<=c;m++) {
dp[i][1][j][k][m] += (dp[i][2][j - 1][k][m] + dp[i][3][j - 1][k][m]) % MOD;
dp[i][2][j][k][m] += (dp[i][1][j][k - 1][m] + dp[i][3][j][k - 1][m]) % MOD;
dp[i][3][j][k][m] += (dp[i][1][j][k][m - 1] + dp[i][2][j][k][m - 1]) % MOD;
}
}
}
}
ll ans = (dp[1][2][a][b][c] + dp[1][3][a][b][c]) % MOD +
(dp[2][1][a][b][c] + dp[2][3][a][b][c]) % MOD +
(dp[3][1][a][b][c] + dp[3][2][a][b][c]) % MOD;
cout << ans % MOD << '\n';
return 0;
}