#include <stdio.h> 
#define MAXN 50

int a[MAXN];
int f=0;  
int subset_no=0;
int verbose=0;
int n=4;
int k=2;

/* subsets(i,j): gera todos os subconjuntos de j elementos de {i,...,n}. 
                 se i>n, imprime o resultado atual; 
                 caso contrario, considera os casos em que i pertence e i nao  
                 nao pertence ao subconjunto separadamente. */

void subsets(int i, int j)
{
  if (i>n) {
    int l;
    printf("%d-subset number %3d: ", k, ++subset_no);
    for (l=0; l<k; l++)
      printf("%d", a[l]);
    printf("\n");
  } else {
    if (j>0) {
      a[f++]=i;
      subsets(i+1,j-1);
      f--;
    } 
    if (n-i+1>j)       
      subsets(i+1,j);
  }
}

int scan_command(int argc, char *argv[])
{
  while (--argc) {
    if (sscanf(argv[argc],"-n%lu", &n)==1) ;
    else if (sscanf(argv[argc],"-k%lu", &k)==1) ;
    else if (strcmp(argv[argc],"-v")==0) verbose=1;
    else {
      printf("Usage: %s [-nN][-kN][-v]\n", argv[0]);
      return -1;
    }
  }
  return 0; /* normal exit from ths function */
}

main(argc,argv)
  int argc; /* the number of command-line arguments */
  char *argv[]; /* an array of strings containing those arguments */
{
  if (scan_command(argc, argv)==0) {
    subsets(1,k);
    return 0; /* normal exit */
  }
}
