class Solution {
public:
//Function to return a list of indexes denoting the required
//combinations whose sum is equal to given number.
void solve(int indx, int target, vector<int> &A, vector<vector<int>> &ans, vector<int> ds){
if(target==0){
ans.push_back(ds);
return;
}
//returning if conditions are out of bound.
if(target<0 || indx>=A.size())
return;
ds.push_back(A[indx]);
solve(indx, target-A[indx], A, ans, ds);
ds.pop_back();
solve(indx+1, target, A, ans, ds);
}
vector<vector<int> > combinationSum(vector<int> &A, int B) {
// Your code here
vector<int> ds;
vector<vector<int>> ans;
sort(A.begin(), A.end());
solve(0, B, A, ans, ds);
}
};