import java.util.Arrays;

public class Permutasi {

    static int[] hasil;
    static boolean[] dipakai;

    public static void main(String[] args) {
        int[] data = {1, 2, 3};
        hasil = new int[data.length];
        dipakai = new boolean[data.length];

        System.out.println("=== Permutasi {1, 2, 3} urutan leksikografis ===");
        buat(data, 0);
    }

    // Backtracking: pilih kandidat terkecil yang belum dipakai, isi posisi,
    // telusuri lebih dalam, lalu lepaskan pilihan untuk cabang berikutnya.
    static void buat(int[] data, int posisi) {
        if (posisi == data.length) {
            System.out.println(Arrays.toString(hasil));
            return;
        }
        for (int i = 0; i < data.length; i++) {
            if (!dipakai[i]) {
                dipakai[i] = true;      // pilih
                hasil[posisi] = data[i];
                buat(data, posisi + 1); // telusuri
                dipakai[i] = false;     // mundur: kembalikan pilihan
            }
        }
    }
}
