/* Jozef Tvarozek - Servis */
#include <stdio.h>
#include "serv_lib.h"

#define MAXN 10000
#define MAXS 20

typedef struct
{
  int customer,tim;
} HITEM;

HITEM h[MAXN+1];
int nheap,nservice;
HITEM s[MAXS];
int ns;

void upheap(int index)
{
  HITEM tmp;
  int i = index;
  while ( i > 1 )
  {
    if ( h[i/2].tim >= h[i].tim )
      break;
    tmp = h[i/2]; h[i/2] = h[i]; h[i] = tmp;
    i /= 2;
  }
}
void downheap(int index)
{
  HITEM tmp;
  int j,i = index;
  while ( i+i <= nheap )
  {
    j = i+i;
    if ( j+1 <= nheap )
      if ( h[j+1].tim > h[j].tim )
        j++;
    if ( h[i].tim >= h[j].tim )
      break;
    tmp = h[j]; h[j] = h[i]; h[i] = tmp;
    i = j;
  }
}
int main(void)
{
  FILE *fin;
  HITEM item;
  int i,ncus=0;

  fin = fopen("ser.in","rt");

  fscanf(fin,"%d",&nservice);
  while ( 1 )
  {
    while ( i = new_customer() )
    {
      h[++nheap].customer = ++ncus;
      h[nheap].tim = i;
      upheap(nheap);
    }
    ns = 0;
    for (i = 0; i < nservice && nheap > 0; i++)
    {
      s[ns++] = h[1];
      assign_job(i+1,h[1].customer);
      s[ns-1].tim--;
      if ( nheap > 1 )
      {
        h[1] = h[nheap];
        downheap(1);
      }
      nheap--;
    }
    for ( i; i < nservice; i++)
      assign_job(i+1,0);
    for ( i = 0; i < ns; i++)
      if ( s[i].tim > 0 )
      {
        h[++nheap] = s[i];
        upheap(nheap);
      }
    next_minute();
  }
  return 0;
}
