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;
    }
};