Submission

Status:

(PPPPPPPPPP)(PPPPP)(PPPPP)(PPPPTSSSSS)

Subtask/Task Score:

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

Score: 80

User: kittipos

Problemset: กองไฟ

Language: cpp

Time: 1.092 second

Submitted On: 2026-03-09 22:48:20

#include <bits/stdc++.h>

using namespace std;

const int MOD = 1e9+7;

int solve(vector<int> left, int prev, int start) {
    // cout << "check: " << prev << endl;
    int sum = 0;
    bool fork = false;
    for (int i = 0; i < 3; i++) {
        if (left[i] == 0) continue;
        fork = true;
        if (prev == i) continue;
        vector<int> new_left = left;
        new_left[i]--;

        sum += solve(new_left, i, start);
        sum %= MOD;
    }

    if (!fork) {
        // cout << "done" << endl;
        if (prev == start) {
            return 0;
        } else {
            return 1;
        }
    }
    return sum;
}

int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n;
    cin >> n;
    vector<int> left;
    left.resize(3);
    for (int i = 0; i < 3; i++) {
        cin >> left[i];
    }

    int sum = 0;
    for (int i = 0; i < 3; i++) {
        vector<int> new_left = left;
        if (new_left[i] == 0) continue;

        new_left[i]--;
        sum += solve(new_left, i, i);
        // cout << sum << endl;
        sum %= MOD;
    }
    cout << sum;

    return 0;
}