import java.util.*;


public class Solution {
    Set<String> ret = new HashSet<>(); 
    //ArrayList<String> ret ;

     StringBuilder path ; //记录走过的字符
     boolean[] check; // 下标对应字符是否被选中过
    public  ArrayList<String> Permutation (String str) {
         //ret = new ArrayList<String>();
         // if(str.length()==1){
        //     ret.add(str);
        //     return ret;
        // }
        check = new boolean[10];
        path = new StringBuilder();
        dfs(str);
         ArrayList<String> res = new ArrayList<>(ret);
       
        return res;
    }

    //深度优先遍历字符串将结果加入ret
    public  void dfs(String str){

        //结束情况
        if(path.length()==str.length()){
            ret.add(new String(path));
            return;
        }
        //遍历字符串,挨个选择字符得出结果
        for(int i=0;i<str.length();i++){
            //当没有选中过该字符时加入路径
            if(check[i]==false){
                path =path.append(str.charAt(i));
                check[i] = true;
                //进行下一层dfs
                dfs(str);
                //dfs结束回溯
                check[i] = false;
                path.deleteCharAt(path.length()-1);
            }
        }
    }
}