class Solution {

public:

```
//customized hash function to store vector<int> in unordered_Set
struct VectorHash {
size_t operator()(const std::vector<int>& v) const {
std::hash<int> hasher;
size_t seed = 0;
for (int i : v) {
seed ^= hasher(i) + 0x9e3779b9 + (seed<<6) + (seed>>2);
}
return seed;
}
```

};

vector<vector<int> > ans;

unordered_set<vector<int>,VectorHash > uset;

```
void recur(vector<int> &nums,int index,vector<int> sol)
{
if(sol.size() > 1)
{
if(uset.find(sol) == uset.end())
{
ans.push_back(sol);
uset.insert(sol);
}
}
if(index == nums.size())
return;
for(int i=index;i<nums.size();i++)
{
if(sol.size() == 0 || nums[i] >= sol.back())
{
sol.push_back(nums[i]);
recur(nums,i+1,sol);
sol.pop_back();
}
else
recur(nums,i+1,sol);
}
}
vector<vector<int>> findSubsequences(vector<int>& nums) {
ans.clear();
vector<int> sol;
recur(nums,0,sol);
return ans;
}
```

};