Submission
Status:
(PPPPPPPPPP)(PPPPP)(PPPPP)(PPPPPPPPPP)
Subtask/Task Score:
{20/20}{30/30}{30/30}{20/20}
Score: 100
User: tHeNyXs
Problemset: กองไฟ
Language: cpp
Time: 0.005 second
Submitted On: 2026-03-15 09:34:12
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll dp[51][51][51][3];
const int mod = 1e9+7;
int main() {
ios_base::sync_with_stdio(false); cin.tie(nullptr);
int n; cin >> n;
int A, B, C; cin >> A >> B >> C;
ll sum = 0;
for (int first = 0; first < 3; ++first) {
if (first == 0 && !A) continue;
if (first == 1 && !B) continue;
if (first == 2 && !C) continue;
memset(dp, 0, sizeof(dp));
int a = A, b = B, c = C;
if (first == 0) a--;
else if (first == 1) b--;
else if (first == 2) c--;
dp[a][b][c][first]++;
for (int i = a; i >= 0; --i) {
for (int j = b; j >= 0; --j) {
for (int k = c; k >= 0; --k) {
for (int last = 0; last < 3; ++last) {
if (last == 0 && i > 0) dp[i-1][j][k][last] += dp[i][j][k][1] + dp[i][j][k][2];
if (last == 1 && j > 0) dp[i][j-1][k][last] += dp[i][j][k][0] + dp[i][j][k][2];
if (last == 2 && k > 0) dp[i][j][k-1][last] += dp[i][j][k][0] + dp[i][j][k][1];
dp[i][j][k][last] %= mod;
}
}
}
}
for (int i = 0; i < 3; ++i) {
if (i == first) continue;
sum += dp[0][0][0][i];
sum %= mod;
}
}
cout << sum;
return 0;
}