#include <stdio.h>
int bit_test(unsigned long *flg, int pos){
return((*flg) >> pos & 1UL);
}
void bit_set(unsigned long *flg, int pos){
*flg |= 1UL << pos;
}
void bit_reset(unsigned long *flg, int pos){
*flg &= ~(1UL << pos);
}
void f(int arr[], unsigned long *flg, int n, int m){
int i;
if(m == 0){
for(i = 0; i < n; i++){
}
return;
}
for(i = 0; i < n; i++){
if(!bit_test(flg, i)){
bit_set(flg, i);
arr[n-m] = i;
f(arr, flg, n, m-1);
bit_reset(flg, i);
}
}
}
int main(void){
int arr[64], n;
unsigned long flg = 0;
if(n < 0 || 64 < n){
return(1);
}
f(arr, &flg, n, n);
return(0);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CmludCBiaXRfdGVzdCh1bnNpZ25lZCBsb25nICpmbGcsIGludCBwb3MpewogICAgcmV0dXJuKCgqZmxnKSA+PiBwb3MgJiAxVUwpOwp9CnZvaWQgYml0X3NldCh1bnNpZ25lZCBsb25nICpmbGcsIGludCBwb3MpewogICAgKmZsZyB8PSAxVUwgPDwgcG9zOwp9CnZvaWQgYml0X3Jlc2V0KHVuc2lnbmVkIGxvbmcgKmZsZywgaW50IHBvcyl7CiAgICAqZmxnICY9IH4oMVVMIDw8IHBvcyk7Cn0Kdm9pZCBmKGludCBhcnJbXSwgdW5zaWduZWQgbG9uZyAqZmxnLCBpbnQgbiwgaW50IG0pewogICAgaW50IGk7CiAgICBpZihtID09IDApewogICAgICAgIGZvcihpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgICAgICAgIHByaW50ZigiJWQgIiwgYXJyW2ldKzEpOwogICAgICAgIH0KICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yKGkgPSAwOyBpIDwgbjsgaSsrKXsKICAgICAgICBpZighYml0X3Rlc3QoZmxnLCBpKSl7CiAgICAgICAgICAgIGJpdF9zZXQoZmxnLCBpKTsKICAgICAgICAgICAgYXJyW24tbV0gPSBpOwogICAgICAgICAgICBmKGFyciwgZmxnLCBuLCBtLTEpOwogICAgICAgICAgICBiaXRfcmVzZXQoZmxnLCBpKTsKICAgICAgICB9CiAgICB9Cn0KaW50IG1haW4odm9pZCl7CiAgICBpbnQgYXJyWzY0XSwgbjsKICAgIHVuc2lnbmVkIGxvbmcgZmxnID0gMDsKICAgIHNjYW5mKCIlZCIsICZuKTsKICAgIGlmKG4gPCAwIHx8IDY0IDwgbil7CiAgICAJcHV0cygiZXJyb3IiKTsKICAgICAgICByZXR1cm4oMSk7CiAgICB9CiAgICBmKGFyciwgJmZsZywgbiwgbik7CiAgICByZXR1cm4oMCk7Cn0K