class Solution {
public:
void dfs(set<vector<int>>&res,vector<int>&num,vector<bool>&fl,vector<int>&temp)
{
bool flag=true;
for(int i=0;i<num.size();i++)
{
if(fl[i])continue;
fl[i]=true;
flag=false;
temp.push_back(num[i]);
dfs(res,num,fl,temp);
temp.pop_back();
fl[i]=false;
}
if(flag)res.insert(temp);
}
vector<vector<int> > permuteUnique(vector<int> &num) {
sort(num.begin(),num.end());
vector<bool>fl(num.size(),false);
vector<int>temp{};
set<vector<int>>res;
vector<vector<int>>ans;
dfs(res,num,fl,temp);
for(auto x:res)ans.push_back(x);
return ans;
}
};