#include <stdio.h>

typedef struct
{
  char *progname;
  int tracksbuffer;
  int trackscore;
} hprog;

hprog hprogs[12]=
{
  {"exit", 1, 1},
  {"start", 1, 1},
  {"run", 1, 1},
  {"binin", 2, 2},
  {"algol", 4, 4},
  {"binout", 5, 5},
  {"set, res, clear", 6, 5},
  {"move", 8, 3},
  {"check...", 10, 9},
  {"edit", 18, 15},
  {"print", 20, 18},
  {"slip", 23, 23}
};

static void perm(long *Z,long a,long b)
{
  long i,j,rem;
  rem=b-1;
  for(i=1;i<=a;i++)
  {
    Z[a-i]=1+rem%i;
    rem=rem/i;
  }
  for(i=a-1;i>=1;i--)
  for(j=i+1;j<=a;j++)
  if(Z[i-1]<=Z[j-1]) Z[j-1]++;
}

long fak12=479001600;

int limitcore=23;
int limitbuffer=21;

long fak(long n)
{
  long f=1;
  long i;
  for(i=2;i<=n;i++) f*=i;
  return f;
}

main()
{
  long Z[12],i,j,k,sum;
  for(i=1; i<=fak12; i++)
  {
    perm(Z, 12, i);
    sum=0;
    for(j=0;j<12;j++)
    {
      sum+=hprogs[Z[j]-1].tracksbuffer;
      if(sum==limitbuffer)
      {
	sum=0;
	printf("\n");
	for(k=0; k<=j; k++)
	{
	  printf("%2d %s\n",hprogs[Z[k]-1].tracksbuffer,hprogs[Z[k]-1].progname);
	}
	i+=fak(12-1-j);
	break;
      }
      if(sum>limitbuffer) break;
    }
  }
}


