class Solution {
public:
vector<string> Permutation(string str) {
vector<string> ans;
if(str.size()==0){
return ans;
}
if(str.size()==1){
ans.push_back(str);
return ans;
}
map<char,int> maps;
for(int i=0;i<str.size();i++){
if(!maps[str[i]]){
maps[str[i]]=1;
}
else{
maps[str[i]]++;
}
}
map<char,int>::iterator it;
for(it=maps.begin();it!=maps.end();it++){
string str0=str;
vector<string> vecs=Permutation(str0.erase(str0.find(it->first),1));
str0=" ";
str0[0]=it->first;
for(int i=0;i<vecs.size();i++){
ans.push_back(str0+vecs[i]);
}
}
return ans;
}
};