typedef long long ll; class Solution { private: vector res; unordered_map hash; public: vector maximumEvenSplit(long long finalSum) { vector tmp; if (finalSum % 2 != 0) return {}; dfs(tmp, finalSum, finalSum, 2); return res; } bool dfs(vector& tmp, ll curr, ll finalSum, ll begin) { if (hash[curr] == -1) return false; if (!curr) { if (!res.size()) { res = tmp; } return true; } if (curr < 0) return false; for (ll i = begin; i <= finalSum; i += 2) { tmp.push_back(i); curr -= i; if (dfs(tmp, curr, finalSum, i + 2)) { hash[curr] = 1; return true; } curr += i; tmp.pop_back(); } hash[curr] = -1; return false; } };