import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param str string字符串
     * @return string字符串ArrayList
     */
      static public ArrayList<String> Permutation (String str) {
    int[] v = new int[str.length()];
    char[] num = str.toCharArray();
    ArrayList<String> result = new ArrayList<>();
    List<String> list = new ArrayList<>();

    Set<String> set = new HashSet<>();

    dfs(num, v, result, list, set);
    return result;
}


static public void dfs(char[] num, int[] v, ArrayList<String> result,
                       List<String> list, Set<String> set ) {
    if (list.size() == num.length) {
        String join = getString(list);
        if (!set.contains(join)) {
            result.add(join);
            set.add(join);
        }
        return;
    }
    for (int i = 0; i < num.length; i++) {
        if (v[i] == 0) {
            list.add(num[i] + "");
            v[i] = 1;
            dfs(num, v, result, list, set);
            list.remove(list.size() - 1);
            v[i] = 0;
        }
    }
}

static  public String getString (List<String> list) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < list.size(); i++) {
        sb.append(list.get(i));
    }
    return sb.toString();
}
}