import java.util.*;

class Solution {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        try {
            String s = sc.nextLine();
            char[] arr = s.toCharArray();
            Arrays.sort(arr); // sort to handle duplicates
            List<String> res = new ArrayList<>();
            boolean[] used = new boolean[arr.length];
            StringBuilder sb = new StringBuilder();
            backtrack(arr, res, sb, used);

            for (String st : res) {
                System.out.println(st + "");
            }
        } catch (Exception e) {
            System.out.println("Invalid input");
        }
    }

    public static void backtrack(char[] arr, List<String> res, StringBuilder sb, boolean[] used) {
        if (sb.length() == arr.length) {
            res.add(sb.toString());
            return;
        }
        for (int i = 0; i < arr.length; i++) {
            if (used[i]) continue; // skip if already used
            if (i > 0 && arr[i] == arr[i-1] && !used[i-1]) continue; // skip duplicates

            used[i] = true;
            sb.append(arr[i]); // ✅ append character, not boolean
            backtrack(arr, res, sb, used);
            sb.deleteCharAt(sb.length() - 1);
            used[i] = false;
        }
    }
}
