#include <stdio.h> 
#define MAXN 50

int a[MAXN];
int particao_no=0;
int n=3, f=0;

void complete_part(int i, int j)
{
  if (i==0) {
    int k;
    printf("Particao numero %d: %d = ", ++particao_no, n);
    for (k=1; k<=f; k++)
      if (a[k]>0)
	printf("%d(%d)", k, a[k]);
    printf("\n");
  } else if (i==1) {
      a[1]=j;
      if (f<1) f=1;
      complete_part(i-1,0);
  } else {
    int k;
    for (k=0; k<=j/i; k++) {
      a[i]=k;
      if ((k>0)&&(f<i)) f=i;
      complete_part(i-1, j-k*i);
    }
  }
}

int scan_command(int argc, char *argv[])
{
  while (--argc) {
    if (sscanf(argv[argc],"-n%lu", &n)==1) ;
    else {
      printf("Usage: %s [-nN]\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) {
    int k;
    for (k=0; k<MAXN; k++)
      a[k]=0;
    printf("[n=parte(multiplicidade)]\n\n");
    complete_part(n,n);
    return 0; /* normal exit */
  }
}
