Submission

Status:

(-SSSSSSSSS)(P-SSS)(P-SSS)(SSSSSSSSSS)

Subtask/Task Score:

{0/20}{0/30}{0/30}{0/20}

Score: 0

User: Gump2011

Problemset: กองไฟ

Language: cpp

Time: 0.010 second

Submitted On: 2026-03-08 22:28:16

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll MOD = 1e9 + 7;
ll dp[55][55][55][3][3];
int main(){
    ios::sync_with_stdio(0), cin.tie(0);

    int n,a,b,c;
    cin >> n;
    cin >> a >> b >> c;

    ll ans = 0;

    for(int f=0;f<3;f++){

        memset(dp,0,sizeof(dp));

        if(f==0 && a==0) continue;
        if(f==1 && b==0) continue;
        if(f==2 && c==0) continue;

        int na=a,nb=b,nc=c;

        if(f == 0){
            na--;
        }
        if(f == 1){
            nb--;
        }
        if(f == 2){
            nc--;
        }

        dp[na][nb][nc][f][f]=1;

        for(int i=0;i<=a;i++){
            for(int j=0;j<=b;j++){
                for(int k=0;k<=c;k++){
                    for(int e=0;e<3;e++){
                        ll cur = dp[i][j][k][e][f];
                        if(cur == 0){
                            continue;
                        }

                        if(i>0 && e!=0){
                            dp[i-1][j][k][0][f] = (dp[i-1][j][k][0][f] + cur) % MOD;
                        }

                        if(j>0 && e!=1){
                            dp[i][j-1][k][1][f] = (dp[i][j-1][k][1][f] + cur) % MOD;
                        }

                        if(k>0 && e!=2){
                            dp[i][j][k-1][2][f] = (dp[i][j][k-1][2][f] + cur) % MOD;
                        }
                    }
                }
            }
        }

        for(int e=0;e<3;e++){
            if(e==f){
                continue;
            }
            ans = (ans + dp[0][0][0][e][f]) % MOD;
        }
    }

    cout<<ans;
}