#include "molecules.h"
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
using namespace std;
std::vector<signed> find_subset(signed lo, signed hi, std::vector<signed> w) {
int n = w.size();
vector<pair<int, int>> nums(n);
for (int i = 0; i < n; i++){
nums[i] = {w[i], i};
}
sort(nums.begin(), nums.end());
int l = 0, r = n-1, curSum = 0;
while(l < n){
if (curSum + nums[l].fi <= hi){
curSum += nums[l].fi;
l++;
}
else break;
}
if (l == 0){
return vector<signed>();
}
int rl = 0, rr = l-1;
// l is item where we cant take
while(curSum <= hi && r >= l && rr >= rl){
// keep replacing min with max
if (curSum + nums[r].fi - nums[rl].fi <= hi){
curSum += nums[r].fi - nums[rl].fi;
r--;
rl++;
}
else break;
}
if (curSum >= lo){
vector<signed> ans;
for (; rl <= rr; rl++){
ans.push_back(nums[rl].se);
}
r++;
for (; r < n; r++){
ans.push_back(nums[r].se);
}
return ans;
}
return vector<signed>();
}