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