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;
}