#include<map>usingnamespacestd;classSolution{public:vector<vector<int>>ans;map<vector<int>,int>markmap;boolflag[100000];intsum;vector<vector<int>>permuteUnique(vector<int>&num){// Note: The Solution object is instantiated only once and is reused by each test case.
ans.clear();markmap.clear();sum=num.size();for(inti=0;i<sum;i++){flag[i]=false;}for(inti=0;i<sum;i++){flag[i]=true;vector<int>tmp(sum);tmp[0]=i;fun(tmp,1,num);flag[i]=false;}returnans;}voidfun(vector<int>&tmp,intk,vector<int>&num){if(k>=sum){vector<int>numtmp(sum);for(inti=0;i<sum;i++){numtmp[i]=num[tmp[i]];}map<vector<int>,int>::iteratorl_it=markmap.find(numtmp);if(markmap.empty()||l_it==markmap.end()){ans.push_back(numtmp);markmap[numtmp]=590;}return;}for(inti=0;i<sum;i++){if(!flag[i]){flag[i]=true;tmp[k]=i;fun(tmp,k+1,num);flag[i]=false;}}}};