import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param str string字符串
     * @return string字符串ArrayList
     */
    public ArrayList<String> Permutation (String str) {
        // write code here
        HashSet<String> set = new HashSet<>();
        dfs(str, 0, set, new StringBuilder(), new boolean[str.length()]);
        return new ArrayList<>(set);
    }
    private void dfs(String str,
                     int idx,
                     HashSet<String> set,
                     StringBuilder sb,
                     boolean[] isUsed) {
        if (sb.length() == str.length()) set.add(sb.toString());
        else {
            for (int i = 0; i < str.length(); i++) {
                if (!isUsed[i]) {
                    sb.append(str.charAt(i));
                    isUsed[i] = true;
                    dfs(str, i, set, sb, isUsed);
                    sb.deleteCharAt(sb.length() - 1);
                    isUsed[i] = false;
                }
            }
        }
    }
}