/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
permute(1,2,3);
}
public static List<List<Integer>> permute(int... nums) {
List<List<Integer>> list = new ArrayList<>();
// Arrays.sort(nums); // not necessary
backtrack(list, new ArrayList<>(), nums, "");
return list;
}
private static void backtrack
(List
<List
<Integer
>> list, List
<Integer
> tempList,
int [] nums,
String spaces
){ if(tempList.size() == nums.length){
list.add(new ArrayList<>(tempList));
} else{
for(int i = 0; i < nums.length; i++){
if(tempList.contains(nums[i]))
continue;
System.
out.
println(spaces
+ "Adding: "+nums
[i
]); tempList.add(nums[i]);
backtrack(list, tempList, nums, spaces + " ");
System.
out.
println(spaces
+ "Removing: "+nums
[i
]); tempList.remove(tempList.size() - 1);
}
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCXBlcm11dGUoMSwyLDMpOwoJfQoJCiAgICBwdWJsaWMgc3RhdGljIExpc3Q8TGlzdDxJbnRlZ2VyPj4gcGVybXV0ZShpbnQuLi4gbnVtcykgewogICAgICAgTGlzdDxMaXN0PEludGVnZXI+PiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAvLyBBcnJheXMuc29ydChudW1zKTsgLy8gbm90IG5lY2Vzc2FyeQogICAgICAgYmFja3RyYWNrKGxpc3QsIG5ldyBBcnJheUxpc3Q8PigpLCBudW1zLCAiIik7CiAgICAgICByZXR1cm4gbGlzdDsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGJhY2t0cmFjayhMaXN0PExpc3Q8SW50ZWdlcj4+IGxpc3QsIExpc3Q8SW50ZWdlcj4gdGVtcExpc3QsIGludCBbXSBudW1zLCBTdHJpbmcgc3BhY2VzKXsKICAgICAgIGlmKHRlbXBMaXN0LnNpemUoKSA9PSBudW1zLmxlbmd0aCl7CiAgICAgICAgICBsaXN0LmFkZChuZXcgQXJyYXlMaXN0PD4odGVtcExpc3QpKTsKICAgICAgIH0gZWxzZXsKICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1zLmxlbmd0aDsgaSsrKXsgCiAgICAgICAgICAgICBpZih0ZW1wTGlzdC5jb250YWlucyhudW1zW2ldKSkgCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3BhY2VzICsgIkFkZGluZzogIitudW1zW2ldKTsKICAgICAgICAgICAgIHRlbXBMaXN0LmFkZChudW1zW2ldKTsKICAgICAgICAgICAgIGJhY2t0cmFjayhsaXN0LCB0ZW1wTGlzdCwgbnVtcywgc3BhY2VzICsgIiAgIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3BhY2VzICsgIlJlbW92aW5nOiAiK251bXNbaV0pOwogICAgICAgICAgICAgdGVtcExpc3QucmVtb3ZlKHRlbXBMaXN0LnNpemUoKSAtIDEpOwogICAgICAgICAgfQogICAgICAgfQogICAgfSAKfQ==