
/* 
As an exercise, comment the program yourself
*/

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

void PrintPermutation(int *matrix, int n)
{
   int i;  
   for(i=0;i<n;i++)
      printf("%d \t",matrix[i]);

   printf("\n");
   return;
}

void Permute(int *matrix, int k,int n, int *number_per)
{
  int i;
  if(k==0) { 
  	PrintPermutation(matrix,n); (*number_per)++;}
  else {
  	for(i=0;i<n;i++){
  	      if(matrix[i]==0) {
              	matrix[i]=k;
              	Permute(matrix,k-1,n,number_per);
             	matrix[i]=0;
	      }
        }
  }
  return;
}


int* allocate1D(int row){
  int *S;
  S=(int *)calloc(row,sizeof(int));
  if(S==NULL){
	printf("\n No space \n"); exit(0);
  }
 
 return S;
}

 int main(void){
 int m, *matrix, number_per=0; 
 printf("\n How many numbers you want to permute::>"); 
 scanf("%d",&m);
 
 matrix = allocate1D(m);
 
 Permute(matrix,m,m,&number_per);
 printf("\n Total number of permutations::> %d",number_per); 

 printf("\n");
 return 0;
}
