#include<stdio.h>
#include<stdlib.h>

int permutation(char nchars[], char result[], int count, int max);
void arrayPrint(char a[], int count);

int permutation(char nchars[], char result[], int count, int max) {
	int i;
	int j;
	char *remain;
	
	if (count == max) {
		arrayPrint(result, max);
		return EXIT_SUCCESS;
	}

	for (i = 0; i < max - count; i++) {		
		remain = calloc(max - count, sizeof(char));
		
		for (j = 0; j < max - count; j++) {
			remain[j] = nchars[j];
		}
		
		result[count] = remain[i];
		
		for (j = i + 1; j < max - count; j++) {
			remain[j - 1] = remain[j];
		}
		
		permutation(remain, result, count + 1, max);
		
		free(remain);
	}
	
	return EXIT_SUCCESS;
}

void arrayPrint(char a[], int count) {
	int i;
	
	for (i = 0; i < count; i++) {
		printf("%c", a[i]);
		if (i < count - 1) {
			printf(",");
		} else {
			printf("\n");
		}
	}
}

int main(int argc, char *argv[]) {
	char *chars = "abcdefghijklmno";
	char *nchars;
	char *result;
	int n;
	int i;

	/* n = atoi(argv[1]); */
	n = 5;
	
	nchars = calloc(n, sizeof(char));
	result = calloc(n, sizeof(char));
	
	for (i = 0; i < n; i++) {
		nchars[i] = chars[i];
	}
	
	permutation(nchars, result, 0, n);
	
	free(result);
	free(nchars);
	
	return EXIT_SUCCESS;
}