import java.util.*;

public class Solution {
    public ArrayList<String> Permutation(String str) {
       ArrayList<String> res = new ArrayList<>();
       dfs(0, str.length(), str.toCharArray(), new boolean[str.length()], new StringBuilder(), res);
       return res;
    }

    public void dfs(int k, int n, char[] cc, boolean[] visited, StringBuilder sb, ArrayList<String> res){
        if(k == n){
            if(!res.contains(sb.toString())){
                res.add(sb.toString());
            }
            return;
        }

        for(int i = 0; i < n; ++i){
            if(!visited[i]){
                sb.append(cc[i]);
                visited[i] = true;
                dfs(k + 1, n, cc, visited, sb, res);
                visited[i] = false;
                sb.deleteCharAt(sb.length() - 1);
            }
        }
    }
}