Submission
Status:
(PPPPPPPPPP)(PPPPP)(PPPPP)(PPPPPPPPPP)
Subtask/Task Score:
{20/20}{30/30}{30/30}{20/20}
Score: 100
User: SnowAveNode
Problemset: กองไฟ
Language: python
Time: 0.693 second
Submitted On: 2026-04-22 19:06:44
import sys
input=sys.stdin.readline
MOD = 10**9+7
n=int(input())
na,nb,nc=map(int,input().split())
hf=n//2
if na>hf or nb>hf or nc>hf:
print(0)
exit()
dp = [[[[[0]*3 for _ in range(3)] for _ in range(55)] for _ in range(55)] for _ in range(2)]
dp[0][1][0][0][0] = 1
dp[0][0][1][1][1] = 1
dp[0][0][0][2][2] = 1
for i in range(n-1):
cur,next= i%2, (i+1)%2
dp[next] = [[[[0]*3 for _ in range(3)] for _ in range(55)] for _ in range(55)]
for a in range(na+1):
for b in range(nb+1):
c= i+1 -a-b
if c<0 or c>nc: continue
for prev in range(3):
for first in range(3):
val = dp[cur][a][b][prev][first]
if val==0: continue
if a<na and prev!=0: dp[next][a+1][b][0][first] = (dp[next][a+1][b][0][first] + val) % MOD
if b<nb and prev!=1: dp[next][a][b+1][1][first] = (dp[next][a][b+1][1][first] + val) % MOD
if c<nc and prev!=2: dp[next][a][b][2][first] = (dp[next][a][b][2][first] + val) % MOD
ans = 0
for prev in range(3):
for first in range(3):
if prev==first: continue
last = (n-1)%2
ans = (ans + dp[last][na][nb][prev][first]) % MOD
print(ans)