#include <stdio.h>
#include <string.h>

#define TEST 1

void permute(int *s, int start, int end);
void swap(int *s, int start, int end);
void startTesting();

int main(void) {
#ifdef TEST
    startTesting();
#endif

    return 0;
}

void swap(int *s, int start, int end) {
    int temp = s[start];
    s[start] = s[end];
    s[end] = temp;
}

void permute(int *s, int start, int end)
{
    int i = 0;
    int j = 0;

    if (start == end) {
        for (i = 0; i < 4; i++) {
            printf("%d ", s[i]);
        }
        printf("\n");
    } else {
        for (j = start; j <= end; j++) {
            swap(s, start, j);
            permute(s, start + 1, end);
            swap(s, start, j);
        }
    }
}

void test1()
{
    int s[] = {1, 2, 3, 4};
    int i = 0;

    printf("permute \n");
    for (i = 0; i < 4; i++) {
        printf("%d ", s[i]);
    }
    printf("\n");

    permute(s, 0, 3);
    printf("\n");
}

void startTesting()
{
    test1();
}
