import java.util.Arrays;
class SendfromHigherFrameToLowerFrame {
public static void main
(String[] args
) { int[] a = {1,2,3};
int[] stack = new int[3];
int count = fun(a, stack, 0);
System.
out.
println("count == "+count
); }
static int fun(int[] a, int[] stack, int frame) {
if(a.length == frame) {
print(stack);
return 1;
}
int res = 0;
for(int i = 0;i<a.length;i++) {
//save stack
int[] temp = new int[stack.length];
save(stack, temp);
if(isValid(stack, a[i]) == true) {
stack[frame] = a[i];
res += fun(a, stack, frame+1);
//restore stack
restore(temp, stack);
}
}
return res;
}
static void save(int[] source, int[] destination) {
for(int i = 0;i<source.length;i++)
destination[i] = source[i];
}
static void restore(int[] source, int[] destination) {
for(int i = 0;i<source.length;i++)
destination[i] = source[i];
}
static boolean isValid(int[] a, int key) {
for(int i = 0;i<a.length;i++) {
if(a[i] == key)
return false;
}
return true;
}
static void print(int[] a)
{
for(int x : a)
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheXM7CgpjbGFzcyBTZW5kZnJvbUhpZ2hlckZyYW1lVG9Mb3dlckZyYW1lIHsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgaW50W10gYSA9IHsxLDIsM307CgogICAgICAgIGludFtdIHN0YWNrID0gbmV3IGludFszXTsKICAgICAgICBpbnQgY291bnQgPSBmdW4oYSwgc3RhY2ssIDApOwoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50ID09ICIrY291bnQpOwogICAgfQoKICAgIHN0YXRpYyBpbnQgZnVuKGludFtdIGEsIGludFtdIHN0YWNrLCBpbnQgZnJhbWUpIHsKICAgICAgICBpZihhLmxlbmd0aCA9PSBmcmFtZSkgewogICAgICAgICAgICBwcmludChzdGFjayk7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBpbnQgcmVzID0gMDsKICAgICAgICBmb3IoaW50IGkgPSAwO2k8YS5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgIC8vc2F2ZSBzdGFjawogICAgICAgICAgICBpbnRbXSB0ZW1wID0gbmV3IGludFtzdGFjay5sZW5ndGhdOwogICAgICAgICAgICBzYXZlKHN0YWNrLCB0ZW1wKTsKICAgICAgICAgICAgaWYoaXNWYWxpZChzdGFjaywgYVtpXSkgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgc3RhY2tbZnJhbWVdID0gYVtpXTsKICAgICAgICAgICAgICAgIHJlcyArPSBmdW4oYSwgc3RhY2ssIGZyYW1lKzEpOwogICAgICAgICAgICAgICAgLy9yZXN0b3JlIHN0YWNrCiAgICAgICAgICAgICAgICByZXN0b3JlKHRlbXAsIHN0YWNrKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgfQoKICAgIHN0YXRpYyB2b2lkIHNhdmUoaW50W10gc291cmNlLCBpbnRbXSBkZXN0aW5hdGlvbikgewogICAgICAgIGZvcihpbnQgaSA9IDA7aTxzb3VyY2UubGVuZ3RoO2krKykKICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBzb3VyY2VbaV07CiAgICB9CgogICAgc3RhdGljIHZvaWQgcmVzdG9yZShpbnRbXSBzb3VyY2UsIGludFtdIGRlc3RpbmF0aW9uKSB7CiAgICAgICAgZm9yKGludCBpID0gMDtpPHNvdXJjZS5sZW5ndGg7aSsrKQogICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHNvdXJjZVtpXTsKICAgIH0KCiAgICBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkKGludFtdIGEsIGludCBrZXkpIHsKICAgICAgICBmb3IoaW50IGkgPSAwO2k8YS5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgIGlmKGFbaV0gPT0ga2V5KQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBzdGF0aWMgdm9pZCBwcmludChpbnRbXSBhKQogICAgewogICAgICAgIGZvcihpbnQgeCA6IGEpCiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoeCArICIgIik7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICB9Cn0K