#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @return string字符串vector
     */
    vector<bool> st;
    string path;
    unordered_set<string> res;
    void dfs(string s)
    {
        if(path.length() == s.length())
        {
            res.insert(path);
            return;
        }
        for(int i = 0; i < s.length(); i ++)
        {
            if(!st[i])
            {
                st[i] = true;
                path += s[i];
                dfs(s);
                path.pop_back();
                st[i] = false;
            }
        }

    }

    vector<string> Permutation(string str) {
        st.resize(str.length(), false);
        vector<string> ans;
        dfs(str);
        for(auto r : res) ans.push_back(r);
        sort(ans.begin(), ans.end());
        return ans;
    }
};