#include<stdio.h>


#define SWAP( x, y ) { int tmp; tmp = x; x = y ; y = tmp; }

void array_permutations_rec( int *v, int nv, int st ) {
	int i;
	if (st == nv-1) {
		
		for (i=0; i < nv; i++)
			printf( "%d ", v[i] );
		printf( "\n" );
		return;
	}

	for (i=st; i < nv; i++) {
		SWAP( v[st], v[i] );
		array_permutations_rec( v, nv, st+1 );
		SWAP( v[i], v[st] );
	}
}


int main( void ) {
	int numbers[] = {1,2,3,4};
	array_permutations_rec( numbers, sizeof(numbers)/sizeof(int), 0 );


}

