3
vector<int> earliestAndLatest(int n, int first, int second) {4
int minRound = INT_MAX, maxRound = INT_MIN;6
function<void(int, int, int, int)> dfs = [&](int deadMask, int i, int j, int curRound) {7
while (i < j and deadMask & (1 << i)) // 'i' is dead warrior, try next10
while (i < j and deadMask & (1 << j)) // 'j' is dead warrior, try next13
if (i >= j) // end of round, no more fights possible14
dfs(deadMask, 1, n, curRound + 1);16
else if (i == first and j == second) // BATTLE OF THE IMMORTALS17
minRound = min(curRound, minRound), maxRound = max(curRound, maxRound);19
else { // BATTLE includes a mortal20
if (i != first and i != second) // 'i' is MORTAL, he may die21
dfs(deadMask | (1 << i), i + 1, j - 1, curRound);22
if (j != first and j != second) // 'j' is MORTAL, he may die23
dfs(deadMask | (1 << j), i + 1, j - 1, curRound);27
return {minRound, maxRound};