#include "common.h"

#define SWAP(A, i, j) { int t; t = A[i], A[i] = A[j], A[j] = t; }


void permute(int *A, int k, int n)
{
    int i;

    if(k==n) {
        for (i = 0; i < n; i++) {
            printf("%d ", A[i]);
        }
        putchar('\n');
        return;
    }

    for(i = k; i < n; i++){
        SWAP(A, i, k);
        permute(A, k+1, n);
        SWAP(A, k, i);
    }

    return;
}

int main(int ac, char *av[])
{
    int *array, n, i;

    if (ac != 2)
        ERR_MESG("Usage: permute n");
    if (0 > (n = atoi(av[1])))
        ERR_MESG("permute: negative argument provided");
    if (NULL == (array = Malloc(n, int)))
        ERR_MESG("permute: out of memory");
    for (i = 0; i < n; i++)
        array[i] = i+1;
    permute(array, 0, n);

    return 0;
}
