#include <stdio.h>  /* version 2008-08-07 */
#define BITS  8
#define  TWO  2        

int main(unsigned argc, char *argv[])
{  int   c;
   unsigned   h, i, j, k, no;
   FILE  *fp;
   if (argc <= 1)
      return  fprintf(stderr,"usage: %s datafile\n",argv[0]), 1;
   if ((unsigned char)~0 != (1U<<BITS)-1)
      return  fprintf(stderr,"ERROR  bytes must have exactly %u bits",BITS), 2;
   if (!(fp = fopen (argv[1],"r")))
      return  fprintf(stderr,"can't open %s\n",argv[1]), 3;
   no = 1;
   while (1 == scanf("%u",&no) && no)
   {  if (fseek(fp, (long)(no-1)/4, SEEK_SET) || EOF == (c=getc(fp)))
         fprintf(stderr,"insufficient data\n"), 4;
      else
      {  c >>= TWO*((no-1)&3);
         for (k=no,i=j=0;k;k>>=1,j++)
            i += k&1;
         j--;
         for (h=0,k=i,i--;i;h++)
            i >>=1;
         i= h+j+ (no!=2135101487U ? c&(1<<TWO)-1 : 4);
         printf("l(%u)=lb(%u)+s(%u)=%u+%u=%u  v(%u)=%u\n", no, no,no,j,i-j,i,no,k);
      }
   }
   fclose(fp);
   return  0;
}
