#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

#define N 10000


double x[N], y[N], z[N];
double hmin, hmax, hstep;
int nd, nh;

int datain(char *fname)
{
  FILE *f;
  int i;

  f=fopen(fname, "rt");
  i=0;
  while( fscanf(f,"%lf",&x[i]) != EOF ) 
  { 
    /* printf("%d %lf\n", i, x[i]); */
     i++;
  }
  fclose(f);

   

  return i;
}


int compute(int nn)
{
   int i,j,nh;
   double hh;

   i=0;
   hh= hmin;
   while(hh<=hmax) 
   {
     y[i] = hh; 
     z[i] = 0.0;
     hh = hh + hstep;
     i++;
   }
   nh = i;
  /* printf("%d \n", nh);  */

   for(i=0; i<nn; i++)
   {
     j=0; 
    /*  printf("%d %lf \n", i, x[i]);  */
     while( (x[i]>=y[j]) && (j<nh-1)) 
     {
       /* printf("  %d %lf ", j, y[j]);  */
        j++;
     }
    /* printf("%d %lf     %d  %lf\n", i,x[i], j-1, y[j-1]);   */
     if(j>0) 
     {
        if(x[i]>y[j-1]-0.5*hstep) z[j] = z[j]+1; else z[j-1] = z[j-1]+1; 
     } 
     else z[0] = z[0]+1;
   }

   return nh;
}

int main(int argc, char *argv[])
{
  int i;
  char fname[256];
     
     if(argc!=5) { strcpy(fname,"hist.in"); hmin = -2.0; hmax = 1.0; hstep = 0.1; }
     else { strcpy(fname,argv[1]); hmin=atof(argv[2]); hmax=atof(argv[3]); hstep=atof(argv[4]); }

     nd = datain(fname);
     nh = compute(nd);  
     for(i=0; i<nh; i++) printf("%lf %lf \n", y[i], z[i]);   
}  
