#include "head.h"

/* This refreshes XplusG for the min process when a point x dies */
void mindeath(
	   long i,                /* Label of the point x */
	   long length,           /* Number of points in the process */
	   location points[] /* All the info for all the points */
	   )
{
  long rightdad,gdad,lchild,gchild,size,j,temp;
  long nnextcount,nextcount,counter,lastcount,llastcount,lllastcount;

  temp=length;
  for(size=0;temp>0;++size)       /* Find out length of a row */
    temp -= pow(2,(double) size);
  size-=1;

  /* Deal with points other than end points first */
  lastcount=-1;
  counter = pow(2,(double) size)-1;
  nextcount=counter+pow(2,(double) size-1);
  nnextcount=nextcount+pow(2,(double) (size-2));
  rightdad=counter+1+(i+(i%2))/2;                /* right dad of i. */
  gdad=nextcount+(rightdad-counter-1+(rightdad%2))/2;        /* rdad's ldad. */

  if(i<(counter-2) && i>2){            /* Point in bottom row */
    /* minus end points. */
    /* Begin by removing all points from XplusG that might be there 
       as a result of the presence of i. */
    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
      points[i].XplusG.min=points[i+1].XplusG.min=
      points[i-1].XplusG.min=0;
    /* Now put the ones which were there as a result of the presence 
       of some other point back. */
    /* The above is done at the beginning of every section and will 
       not be commented henceforth. */

    if(i%2){
      if(points[rightdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=1;
	
      if(points[rightdad-1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=
	  points[i-1].XplusG.min=1;

      if(points[rightdad-2].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

      if(points[rightdad+1].life.min > 0)
	points[rightdad].XplusG.min=1;

      if(points[i-1].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=
	  points[i].XplusG.min=1;

      if(points[i-2].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

      if(points[i+1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=1;

      if(points[i+2].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

      if(points[i+3].life.min > 0)
	points[rightdad].XplusG.min=1;

      if(i%4==3){
	if((points[gdad].life.min > 0)||(points[gdad+1].life.min > 0))
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;
      }
      else{
	if(points[gdad+1].life.min > 0)
	  points[rightdad].XplusG.min=1;

	if(points[gdad].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

	if(points[gdad-1].life.min > 0)
	  points[rightdad-1].XplusG.min=1;
      }
    }
    else{
      if(points[rightdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=
	  points[i-1].XplusG.min=1;

      if(points[rightdad-1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i-1].XplusG.min=1;

      if(points[rightdad-2].life.min > 0)
	points[rightdad-1].XplusG.min=1;

      if(points[rightdad+1].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

      if(points[i-1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i-1].XplusG.min=1;

      if(points[i-2].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

      if(points[i+1].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=
	  points[i].XplusG.min=1;

      if(points[i+2].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

      if(points[i-3].life.min > 0)
	points[rightdad-1].XplusG.min=1;

      if(i%4==0){
	if((points[gdad].life.min > 0)||(points[gdad+1].life.min > 0))
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;
      }
      else{
	if(points[gdad+1].life.min > 0)
	  points[rightdad].XplusG.min=1;

	if(points[gdad].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

	if(points[gdad-1].life.min > 0)
	  points[rightdad-1].XplusG.min=1;
      }
    }
  }
  /* Now deal with end points (i=0,1,2,c-2,c-1,c) */
  if(i==0){
    points[counter+1].XplusG.min=points[nextcount].XplusG.min=
      points[i].XplusG.min=points[i+1].XplusG.min=
      points[counter].XplusG.min=0;

    if(points[counter+1].life.min > 0)
      points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=
	points[counter].XplusG.min=1;
    
    if(points[nextcount].life.min > 0)
      points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	points[i].XplusG.min=points[counter].XplusG.min=1;
    
    if(points[nextcount-1].life.min > 0)
      points[nextcount].XplusG.min=1;
    
    if(points[counter+2].life.min > 0)
      points[counter+1].XplusG.min=points[i+1].XplusG.min=1;
    
    if(points[counter].life.min > 0)
      points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	points[i].XplusG.min=points[counter].XplusG.min=1;
    
    if(points[counter-1].life.min > 0)
      points[nextcount].XplusG.min=points[counter].XplusG.min=1;
    
    if(points[i+1].life.min > 0)
      points[counter+1].XplusG.min=points[i+1].XplusG.min=
	points[i].XplusG.min=1;
    
    if(points[i+2].life.min > 0)
      points[counter+1].XplusG.min=points[i+1].XplusG.min=1;
    
    if(points[counter-2].life.min > 0)
      points[nextcount].XplusG.min=1;
    
    if((points[nnextcount].life.min > 0)||(points[nextcount+1].life.min > 0))
      points[counter+1].XplusG.min=points[nextcount].XplusG.min=1;
  }

  if(i==1){
    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
      points[i].XplusG.min=points[i+1].XplusG.min=
      points[i-1].XplusG.min=0;

    if(points[rightdad].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=1;
	
    if(points[rightdad-1].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=
	points[i-1].XplusG.min=1;

    if(points[nextcount].life.min > 0)
      points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

    if(points[rightdad+1].life.min > 0)
      points[rightdad].XplusG.min=1;

    if(points[i-1].life.min > 0)
      points[rightdad-1].XplusG.min=points[i-1].XplusG.min=
	points[i].XplusG.min=1;

    if(points[counter].life.min > 0)
      points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

    if(points[i+1].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=1;

    if(points[i+2].life.min > 0)
      points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

    if(points[i+3].life.min > 0)
      points[rightdad].XplusG.min=1;

    if(points[gdad+1].life.min > 0)
      points[rightdad].XplusG.min=1;

    if(points[gdad].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

    if(points[nnextcount].life.min > 0)
      points[rightdad-1].XplusG.min=1;
  }

  if(i==2){
    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
      points[i].XplusG.min=points[i+1].XplusG.min=
      points[i-1].XplusG.min=0;

    if(points[rightdad].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=
	points[i-1].XplusG.min=1;

    if(points[rightdad-1].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[i].XplusG.min=points[i-1].XplusG.min=1;

    if(points[nextcount].life.min > 0)
      points[rightdad-1].XplusG.min=1;

    if(points[rightdad+1].life.min > 0)
      points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

    if(points[i-1].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[i].XplusG.min=points[i-1].XplusG.min=1;

    if(points[i-2].life.min > 0)
      points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

    if(points[i+1].life.min > 0)
      points[rightdad].XplusG.min=points[i+1].XplusG.min=
	points[i].XplusG.min=1;

    if(points[i+2].life.min > 0)
      points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

    if(points[counter].life.min > 0)
      points[rightdad-1].XplusG.min=1;

    if(points[gdad+1].life.min > 0)
      points[rightdad].XplusG.min=1;

    if(points[gdad].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

    if(points[nnextcount].life.min > 0)
      points[rightdad-1].XplusG.min=1;
  }

  if(i==(counter-2)){
    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
      points[i].XplusG.min=points[i+1].XplusG.min=
      points[i-1].XplusG.min=0;

    if(points[rightdad].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=1;

    if(points[rightdad-1].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=
	points[i-1].XplusG.min=1;

    if(points[rightdad-2].life.min > 0)
      points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

    if(points[counter+1].life.min > 0)
      points[rightdad].XplusG.min=1;

    if(points[i-1].life.min > 0)
      points[rightdad-1].XplusG.min=points[i-1].XplusG.min=
	points[i].XplusG.min=1;

    if(points[i-2].life.min > 0)
      points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

    if(points[i+1].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=1;

    if(points[i+2].life.min > 0)
      points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

    if(points[lastcount+1].life.min > 0)
      points[rightdad].XplusG.min=1;

    if(points[nextcount+1].life.min > 0)
      points[rightdad].XplusG.min=1;

    if(points[gdad].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

    if(points[gdad-1].life.min > 0)
      points[rightdad-1].XplusG.min=1;
  }

  if(i==(counter-1)){
    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
      points[i].XplusG.min=points[i+1].XplusG.min=
      points[i-1].XplusG.min=0;

    if(points[rightdad].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=
	points[i-1].XplusG.min=1;

    if(points[rightdad-1].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[i].XplusG.min=points[i-1].XplusG.min=1;

    if(points[rightdad-2].life.min > 0)
      points[rightdad-1].XplusG.min=1;

    if(points[counter+1].life.min > 0)
      points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

    if(points[i-1].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[i].XplusG.min=points[i-1].XplusG.min=1;

    if(points[i-2].life.min > 0)
      points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

    if(points[i+1].life.min > 0)
      points[rightdad].XplusG.min=points[i+1].XplusG.min=
	points[i].XplusG.min=1;

    if(points[lastcount+1].life.min > 0)
      points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

    if(points[i-3].life.min > 0)
      points[rightdad-1].XplusG.min=1;

    if(points[nextcount+1].life.min > 0)
      points[rightdad].XplusG.min=1;

    if(points[gdad].life.min > 0)
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

    if(points[gdad-1].life.min > 0)
      points[rightdad-1].XplusG.min=1;
  }

  if(i==counter){
    points[counter+1].XplusG.min=points[nextcount].XplusG.min=
      points[i].XplusG.min=points[lastcount+1].XplusG.min=
      points[i-1].XplusG.min=0;

    if(points[counter+1].life.min > 0)
      points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	points[i].XplusG.min=points[lastcount+1].XplusG.min=1;
	
    if(points[nextcount].life.min > 0)
      points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	points[i].XplusG.min=points[lastcount+1].XplusG.min=
	points[i-1].XplusG.min=1;

    if(points[nextcount-1].life.min > 0)
      points[nextcount].XplusG.min=points[i-1].XplusG.min=1;

    if(points[counter+2].life.min > 0)
      points[counter+1].XplusG.min=1;

    if(points[i-1].life.min > 0)
      points[nextcount].XplusG.min=points[i-1].XplusG.min=
	points[i].XplusG.min=1;

    if(points[i-2].life.min > 0)
      points[nextcount].XplusG.min=points[i-1].XplusG.min=1;

    if(points[lastcount+1].life.min > 0)
      points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	points[i].XplusG.min=points[lastcount+1].XplusG.min=1;

    if(points[lastcount+2].life.min > 0)
      points[counter+1].XplusG.min=points[lastcount+1].XplusG.min=1;

    if(points[lastcount+3].life.min > 0)
      points[counter+1].XplusG.min=1;

    if((points[nnextcount].life.min > 0)||(points[nextcount+1].life.min > 0))
      points[counter+1].XplusG.min=points[nextcount].XplusG.min=1;
  }
  /* Now do the second bottom row. */
  llastcount=lastcount;
  lastcount=counter;
  counter=nextcount;
  nextcount=nnextcount;
  nnextcount+=pow(2,(double) (size-3));
  if(lastcount<i && counter>=i){
    rightdad=counter+1+(i-lastcount-1+(i%2))/2;
    gdad=nextcount+(rightdad-counter-1+(rightdad%2))/2;
    lchild=llastcount+(i-lastcount)*2-1;      /* leftchild of i. */
    /* The middle bit minus end points. */
    if((lastcount+3)<i && (counter-2)>i){
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	points[i-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=0;

      if(points[lchild].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-1].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

      if(points[lchild+1].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild+2].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-2].life.min > 0)
	points[i-1].XplusG.min=
	  points[lchild-1].XplusG.min=1;

      if(points[lchild+3].life.min > 0)
	points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=1;

      if(points[lchild+4].life.min > 0)
	points[i+1].XplusG.min=1;

      if(points[lchild-3].life.min > 0)
	points[i-1].XplusG.min=1;

      if(i%2){
	if(points[rightdad].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=1;
	
	if(points[rightdad-1].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=
	    points[i-1].XplusG.min=1;

	if(points[rightdad-2].life.min > 0)
	  points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

	if(points[rightdad+1].life.min > 0)
	  points[rightdad].XplusG.min=1;

	if(points[i-1].life.min > 0)
	  points[rightdad-1].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[i].XplusG.min=1;

	if(points[i-2].life.min > 0)
	  points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

	if(points[i+1].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=1;

	if(points[i+2].life.min > 0)
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

	if(points[i+3].life.min > 0)
	  points[rightdad].XplusG.min=1;

	if(i%4==3){
	  if((points[gdad].life.min > 0)||(points[gdad+1].life.min > 0))
	    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;
	}
	else{
	  if(points[gdad+1].life.min > 0)
	    points[rightdad].XplusG.min=1;

	  if(points[gdad].life.min > 0)
	    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

	  if(points[gdad-1].life.min > 0)
	    points[rightdad-1].XplusG.min=1;
	}
      }
      else{
	if(points[rightdad].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=
	    points[i-1].XplusG.min=1;

	if(points[rightdad-1].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[i].XplusG.min=points[i-1].XplusG.min=1;

	if(points[rightdad-2].life.min > 0)
	  points[rightdad-1].XplusG.min=1;

	if(points[rightdad+1].life.min > 0)
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

	if(points[i-1].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[i].XplusG.min=points[i-1].XplusG.min=1;

	if(points[i-2].life.min > 0)
	  points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

	if(points[i+1].life.min > 0)
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=
	    points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	    points[i].XplusG.min=1;

	if(points[i+2].life.min > 0)
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

	if(points[i-3].life.min > 0)
	  points[rightdad-1].XplusG.min=1;

	if(i%4==0){
	  if((points[gdad].life.min > 0)||(points[gdad+1].life.min > 0))
	    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;
	}
	else{
	  if(points[gdad+1].life.min > 0)
	    points[rightdad].XplusG.min=1;

	  if(points[gdad].life.min > 0)
	    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

	  if(points[gdad-1].life.min > 0)
	    points[rightdad-1].XplusG.min=1;
	}
      }
    }

    if(i==lastcount+1){
      points[i].XplusG.min=points[counter].XplusG.min=
	points[lchild].XplusG.min=points[lastcount].XplusG.min=
	points[lchild+2].XplusG.min=points[nextcount].XplusG.min=
	points[i+1].XplusG.min=points[rightdad].XplusG.min=
	points[lchild+1].XplusG.min=0;

      if(points[lchild].life.min > 0)
	points[i].XplusG.min=points[counter].XplusG.min=
	  points[lchild].XplusG.min=points[lastcount].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lastcount].life.min > 0)
	points[i].XplusG.min=points[counter].XplusG.min=
	  points[lchild].XplusG.min=points[lastcount].XplusG.min=1;

      if(points[lchild+1].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild+2].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lastcount-1].life.min > 0)
	points[counter].XplusG.min=
	  points[lastcount].XplusG.min=1;

      if(points[lchild+3].life.min > 0)
	points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=1;

      if(points[lchild+4].life.min > 0)
	points[i+1].XplusG.min=1;

      if(points[lastcount-2].life.min > 0)
	points[counter].XplusG.min=1;

      if(points[counter+1].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=
	  points[counter].XplusG.min=1;
    
      if(points[nextcount].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	  points[i].XplusG.min=points[counter].XplusG.min=1;
    
      if(points[nextcount-1].life.min > 0)
	points[nextcount].XplusG.min=1;
    
      if(points[counter+2].life.min > 0)
	points[counter+1].XplusG.min=points[i+1].XplusG.min=1;
    
      if(points[counter].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	  points[lchild].XplusG.min=points[lastcount].XplusG.min=
	  points[i].XplusG.min=points[counter].XplusG.min=1;
    
      if(points[counter-1].life.min > 0)
	points[nextcount].XplusG.min=points[counter].XplusG.min=1;
    
      if(points[i+1].life.min > 0)
	points[counter+1].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[i].XplusG.min=1;
    
      if(points[i+2].life.min > 0)
	points[counter+1].XplusG.min=points[i+1].XplusG.min=1;
    
      if(points[counter-2].life.min > 0)
	points[nextcount].XplusG.min=1;
    
      if((points[nnextcount].life.min > 0)||(points[nextcount+1].life.min > 0))
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=1;
    }

    if(i==lastcount+2){
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	points[i-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=0;

      if(points[lchild].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-1].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

      if(points[lchild+1].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild+2].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-2].life.min > 0)
	points[i-1].XplusG.min=
	  points[lchild-1].XplusG.min=1;

      if(points[lchild+3].life.min > 0)
	points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=1;

      if(points[lchild+4].life.min > 0)
	points[i+1].XplusG.min=1;

      if(points[lastcount].life.min > 0)
	points[i-1].XplusG.min=1;

      if(points[rightdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=1;
	
      if(points[rightdad-1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=
	  points[i-1].XplusG.min=1;

      if(points[nextcount].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

      if(points[rightdad+1].life.min > 0)
	points[rightdad].XplusG.min=1;

      if(points[i-1].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i].XplusG.min=1;

      if(points[counter].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

      if(points[i+1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=1;

      if(points[i+2].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

      if(points[i+3].life.min > 0)
	points[rightdad].XplusG.min=1;

      if(points[gdad+1].life.min > 0)
	points[rightdad].XplusG.min=1;

      if(points[gdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

      if(points[nnextcount].life.min > 0)
	points[rightdad-1].XplusG.min=1;
    }

    if(i==lastcount+3){
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	points[i-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=0;

      if(points[lchild].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-1].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

      if(points[lchild+1].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild+2].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-2].life.min > 0)
	points[i-1].XplusG.min=
	  points[lchild-1].XplusG.min=1;

      if(points[lchild+3].life.min > 0)
	points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=1;

      if(points[lchild+4].life.min > 0)
	points[i+1].XplusG.min=1;

      if(points[lchild-3].life.min > 0)
	points[i-1].XplusG.min=1;

      if(points[rightdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=
	  points[i-1].XplusG.min=1;

      if(points[rightdad-1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i-1].XplusG.min=1;

      if(points[nextcount].life.min > 0)
	points[rightdad-1].XplusG.min=1;

      if(points[rightdad+1].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

      if(points[i-1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i].XplusG.min=points[i-1].XplusG.min=1;

      if(points[i-2].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

      if(points[i+1].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[i].XplusG.min=1;

      if(points[i+2].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

      if(points[counter].life.min > 0)
	points[rightdad-1].XplusG.min=1;

      if(points[gdad+1].life.min > 0)
	points[rightdad].XplusG.min=1;

      if(points[gdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

      if(points[nnextcount].life.min > 0)
	points[rightdad-1].XplusG.min=1;
    }

    if(i==(counter-2)){
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	points[i-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=0;

      if(points[lchild].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-1].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

      if(points[lchild+1].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild+2].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-2].life.min > 0)
	points[i-1].XplusG.min=
	  points[lchild-1].XplusG.min=1;

      if(points[lchild+3].life.min > 0)
	points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=1;

      if(points[lchild+4].life.min > 0)
	points[i+1].XplusG.min=1;

      if(points[lchild-3].life.min > 0)
	points[i-1].XplusG.min=1;

      if(points[rightdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=1;
	
      if(points[rightdad-1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=
	  points[i-1].XplusG.min=1;

      if(points[rightdad-2].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

      if(points[counter+1].life.min > 0)
	points[rightdad].XplusG.min=1;

      if(points[i-1].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i].XplusG.min=1;

      if(points[i-2].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

      if(points[i+1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=1;

      if(points[i+2].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

      if(points[lastcount+1].life.min > 0)
	points[rightdad].XplusG.min=1;

      if(points[nextcount+1].life.min > 0)
	points[rightdad].XplusG.min=1;

      if(points[gdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

      if(points[gdad-1].life.min > 0)
	points[rightdad-1].XplusG.min=1;
    }

    if(i==(counter-1)){
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	points[i-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=0;

      if(points[lchild].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-1].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

      if(points[lchild+1].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild+2].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-2].life.min > 0)
	points[i-1].XplusG.min=
	  points[lchild-1].XplusG.min=1;

      if(points[lchild+3].life.min > 0)
	points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=1;

      if(points[llastcount+1].life.min > 0)
	points[i+1].XplusG.min=1;

      if(points[lchild-3].life.min > 0)
	points[i-1].XplusG.min=1;

      if(points[rightdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=
	  points[i-1].XplusG.min=1;

      if(points[rightdad-1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i-1].XplusG.min=1;

      if(points[rightdad-2].life.min > 0)
	points[rightdad-1].XplusG.min=1;

      if(points[counter+1].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

      if(points[i-1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i].XplusG.min=points[i-1].XplusG.min=1;

      if(points[i-2].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

      if(points[i+1].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[i].XplusG.min=1;

      if(points[lastcount+1].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

      if(points[i-3].life.min > 0)
	points[rightdad-1].XplusG.min=1;

      if(points[nextcount+1].life.min > 0)
	points[rightdad].XplusG.min=1;

      if(points[gdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

      if(points[gdad-1].life.min > 0)
	points[rightdad-1].XplusG.min=1;
    }

    if(i==counter){
      points[i].XplusG.min=points[i-1].XplusG.min=
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	points[nextcount].XplusG.min=points[counter+1].XplusG.min=
	points[lastcount+1].XplusG.min=points[llastcount+1].XplusG.min=
	points[lchild+1].XplusG.min=0;

      if(points[lchild].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-1].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

      if(points[lchild+1].life.min > 0)
	points[i].XplusG.min=points[lastcount+1].XplusG.min=
	  points[lchild].XplusG.min=points[llastcount+1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[llastcount+1].life.min > 0)
	points[i].XplusG.min=points[lastcount+1].XplusG.min=
	  points[llastcount+1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-2].life.min > 0)
	points[i-1].XplusG.min=
	  points[lchild-1].XplusG.min=1;

      if(points[llastcount+2].life.min > 0)
	points[lastcount+1].XplusG.min=
	  points[llastcount+1].XplusG.min=1;

      if(points[llastcount+3].life.min > 0)
	points[lastcount+1].XplusG.min=1;

      if(points[lchild-3].life.min > 0)
	points[i-1].XplusG.min=1;

      if(points[counter+1].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	  points[i].XplusG.min=points[lastcount+1].XplusG.min=1;
	
      if(points[nextcount].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	  points[i].XplusG.min=points[lastcount+1].XplusG.min=
	  points[i-1].XplusG.min=1;

      if(points[nextcount-1].life.min > 0)
	points[nextcount].XplusG.min=points[i-1].XplusG.min=1;

      if(points[counter+2].life.min > 0)
	points[counter+1].XplusG.min=1;

      if(points[i-1].life.min > 0)
	points[nextcount].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i].XplusG.min=1;

      if(points[i-2].life.min > 0)
	points[nextcount].XplusG.min=points[i-1].XplusG.min=1;

      if(points[lastcount+1].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	  points[lchild+1].XplusG.min=points[llastcount+1].XplusG.min=
	  points[i].XplusG.min=points[lastcount+1].XplusG.min=1;

      if(points[lastcount+2].life.min > 0)
	points[counter+1].XplusG.min=points[lastcount+1].XplusG.min=1;

      if(points[lastcount+3].life.min > 0)
	points[counter+1].XplusG.min=1;

      if((points[nnextcount].life.min > 0)||(points[nextcount+1].life.min > 0))
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=1;
    }
  }

  /* Now do the middle rows. */
  for(j=1;j<size-3;++j){
    lllastcount=llastcount;
    llastcount=lastcount;
    lastcount=counter;
    counter=nextcount;
    nextcount=nnextcount;
    nnextcount+=pow(2,(double) (size-j-3));
    if(lastcount<i && counter>=i){
      rightdad=counter+1+(i-lastcount-1+(i%2))/2;
      gdad=nextcount+(rightdad-counter-1+(rightdad%2))/2;
      lchild=llastcount+(i-lastcount)*2-1;
      gchild=lllastcount+(lchild-llastcount)*2; /* lchild's rchild. */
      /* The middle bit minus end points. */
      if((lastcount+3)<i && (counter-2)>i){
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=0;

	if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[gchild-2].life.min > 0)||(points[gchild-1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

	if((points[gchild-3].life.min > 0)||(points[gchild-4].life.min > 0))
	  points[lchild-1].XplusG.min=1;

	if((points[gchild+2].life.min > 0)||(points[gchild+3].life.min > 0))
	  points[lchild+2].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[gchild+4].life.min > 0)||(points[gchild+5].life.min > 0))
	  points[lchild+2].XplusG.min=1;

	if(points[lchild].life.min > 0)
	  points[i].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild-1].life.min > 0)
	  points[i].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

	if(points[lchild+1].life.min > 0)
	  points[i].XplusG.min=points[i+1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild+2].life.min > 0)
	  points[i].XplusG.min=points[i+1].XplusG.min=
	    points[lchild+2].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild-2].life.min > 0)
	  points[i-1].XplusG.min=
	    points[lchild-1].XplusG.min=1;

	if(points[lchild+3].life.min > 0)
	  points[i+1].XplusG.min=
	    points[lchild+2].XplusG.min=1;

	if(points[lchild+4].life.min > 0)
	  points[i+1].XplusG.min=1;

	if(points[lchild-3].life.min > 0)
	  points[i-1].XplusG.min=1;

	if(i%2){
	  if(points[rightdad].life.min > 0)
	    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	      points[i].XplusG.min=points[i+1].XplusG.min=1;
	
	  if(points[rightdad-1].life.min > 0)
	    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	      points[i].XplusG.min=points[i+1].XplusG.min=
	      points[i-1].XplusG.min=1;

	  if(points[rightdad-2].life.min > 0)
	    points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

	  if(points[rightdad+1].life.min > 0)
	    points[rightdad].XplusG.min=1;

	  if(points[i-1].life.min > 0)
	    points[rightdad-1].XplusG.min=points[i-1].XplusG.min=
	      points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	      points[i].XplusG.min=1;

	  if(points[i-2].life.min > 0)
	    points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

	  if(points[i+1].life.min > 0)
	    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	      points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	      points[i].XplusG.min=points[i+1].XplusG.min=1;

	  if(points[i+2].life.min > 0)
	    points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

	  if(points[i+3].life.min > 0)
	    points[rightdad].XplusG.min=1;

	  if(i%4==3){
	    if((points[gdad].life.min > 0)||(points[gdad+1].life.min > 0))
	      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;
	  }
	  else{
	    if(points[gdad+1].life.min > 0)
	      points[rightdad].XplusG.min=1;

	    if(points[gdad].life.min > 0)
	      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

	    if(points[gdad-1].life.min > 0)
	      points[rightdad-1].XplusG.min=1;
	  }
	}
	else{
	  if(points[rightdad].life.min > 0)
	    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	      points[i].XplusG.min=points[i+1].XplusG.min=
	      points[i-1].XplusG.min=1;

	  if(points[rightdad-1].life.min > 0)
	    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	      points[i].XplusG.min=points[i-1].XplusG.min=1;

	  if(points[rightdad-2].life.min > 0)
	    points[rightdad-1].XplusG.min=1;

	  if(points[rightdad+1].life.min > 0)
	    points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

	  if(points[i-1].life.min > 0)
	    points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	      points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	      points[i].XplusG.min=points[i-1].XplusG.min=1;

	  if(points[i-2].life.min > 0)
	    points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

	  if(points[i+1].life.min > 0)
	    points[rightdad].XplusG.min=points[i+1].XplusG.min=
	      points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	      points[i].XplusG.min=1;

	  if(points[i+2].life.min > 0)
	    points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

	  if(points[i-3].life.min > 0)
	    points[rightdad-1].XplusG.min=1;

	  if(i%4==0){
	    if((points[gdad].life.min > 0)||(points[gdad+1].life.min > 0))
	      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;
	  }
	  else{
	    if(points[gdad+1].life.min > 0)
	      points[rightdad].XplusG.min=1;

	    if(points[gdad].life.min > 0)
	      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

	    if(points[gdad-1].life.min > 0)
	      points[rightdad-1].XplusG.min=1;
	  }
	}
      }

      if(i==lastcount+1){
	points[i].XplusG.min=points[counter].XplusG.min=
	  points[lchild].XplusG.min=points[lastcount].XplusG.min=
	  points[lchild+2].XplusG.min=points[nextcount].XplusG.min=
	  points[i+1].XplusG.min=points[rightdad].XplusG.min=
	  points[lchild+1].XplusG.min=0;

	if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[llastcount].life.min > 0)||(points[gchild-1].life.min > 0))
	  points[lchild].XplusG.min=points[lastcount].XplusG.min=1;

	if((points[llastcount-1].life.min > 0)||(points[llastcount-2].life.min > 0))
	  points[lastcount].XplusG.min=1;

	if((points[gchild+2].life.min > 0)||(points[gchild+3].life.min > 0))
	  points[lchild+2].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[gchild+4].life.min > 0)||(points[gchild+5].life.min > 0))
	  points[lchild+2].XplusG.min=1;

	if(points[lchild].life.min > 0)
	  points[i].XplusG.min=points[counter].XplusG.min=
	    points[lchild].XplusG.min=points[lastcount].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lastcount].life.min > 0)
	  points[i].XplusG.min=points[counter].XplusG.min=
	    points[lchild].XplusG.min=points[lastcount].XplusG.min=1;

	if(points[lchild+1].life.min > 0)
	  points[i].XplusG.min=points[i+1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild+2].life.min > 0)
	  points[i].XplusG.min=points[i+1].XplusG.min=
	    points[lchild+2].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lastcount-1].life.min > 0)
	  points[counter].XplusG.min=
	    points[lastcount].XplusG.min=1;

	if(points[lchild+3].life.min > 0)
	  points[i+1].XplusG.min=
	    points[lchild+2].XplusG.min=1;

	if(points[lchild+4].life.min > 0)
	  points[i+1].XplusG.min=1;

	if(points[lastcount-2].life.min > 0)
	  points[counter].XplusG.min=1;

	if(points[counter+1].life.min > 0)
	  points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=
	    points[counter].XplusG.min=1;
    
	if(points[nextcount].life.min > 0)
	  points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	    points[i].XplusG.min=points[counter].XplusG.min=1;
    
	if(points[nextcount-1].life.min > 0)
	  points[nextcount].XplusG.min=1;
    
	if(points[counter+2].life.min > 0)
	  points[counter+1].XplusG.min=points[i+1].XplusG.min=1;
    
	if(points[counter].life.min > 0)
	  points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	    points[lchild].XplusG.min=points[lastcount].XplusG.min=
	    points[i].XplusG.min=points[counter].XplusG.min=1;
    
	if(points[counter-1].life.min > 0)
	  points[nextcount].XplusG.min=points[counter].XplusG.min=1;
    
	if(points[i+1].life.min > 0)
	  points[counter+1].XplusG.min=points[i+1].XplusG.min=
	    points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	    points[i].XplusG.min=1;
    
	if(points[i+2].life.min > 0)
	  points[counter+1].XplusG.min=points[i+1].XplusG.min=1;
    
	if(points[counter-2].life.min > 0)
	  points[nextcount].XplusG.min=1;
    
	if((points[nnextcount].life.min > 0)||(points[nextcount+1].life.min > 0))
	  points[counter+1].XplusG.min=points[nextcount].XplusG.min=1;
      }

      if(i==lastcount+2){
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=0;

	if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[gchild-2].life.min > 0)||(points[gchild-1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

	if((points[gchild-3].life.min > 0)||(points[gchild-4].life.min > 0))
	  points[lchild-1].XplusG.min=1;

	if((points[gchild+2].life.min > 0)||(points[gchild+3].life.min > 0))
	  points[lchild+2].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[gchild+4].life.min > 0)||(points[gchild+5].life.min > 0))
	  points[lchild+2].XplusG.min=1;

	if(points[lchild].life.min > 0)
	  points[i].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild-1].life.min > 0)
	  points[i].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

	if(points[lchild+1].life.min > 0)
	  points[i].XplusG.min=points[i+1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild+2].life.min > 0)
	  points[i].XplusG.min=points[i+1].XplusG.min=
	    points[lchild+2].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild-2].life.min > 0)
	  points[i-1].XplusG.min=
	    points[lchild-1].XplusG.min=1;

	if(points[lchild+3].life.min > 0)
	  points[i+1].XplusG.min=
	    points[lchild+2].XplusG.min=1;

	if(points[lchild+4].life.min > 0)
	  points[i+1].XplusG.min=1;

	if(points[lastcount].life.min > 0)
	  points[i-1].XplusG.min=1;

	if(points[rightdad].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=1;
	
	if(points[rightdad-1].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=
	    points[i-1].XplusG.min=1;

	if(points[nextcount].life.min > 0)
	  points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

	if(points[rightdad+1].life.min > 0)
	  points[rightdad].XplusG.min=1;

	if(points[i-1].life.min > 0)
	  points[rightdad-1].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[i].XplusG.min=1;

	if(points[counter].life.min > 0)
	  points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

	if(points[i+1].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=1;

	if(points[i+2].life.min > 0)
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

	if(points[i+3].life.min > 0)
	  points[rightdad].XplusG.min=1;

	if(points[gdad+1].life.min > 0)
	  points[rightdad].XplusG.min=1;

	if(points[gdad].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

	if(points[nnextcount].life.min > 0)
	  points[rightdad-1].XplusG.min=1;
      }

      if(i==lastcount+3){
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=0;

	if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[gchild-2].life.min > 0)||(points[gchild-1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

	if((points[gchild-3].life.min > 0)||(points[gchild-4].life.min > 0))
	  points[lchild-1].XplusG.min=1;

	if((points[gchild+2].life.min > 0)||(points[gchild+3].life.min > 0))
	  points[lchild+2].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[gchild+4].life.min > 0)||(points[gchild+5].life.min > 0))
	  points[lchild+2].XplusG.min=1;

	if(points[lchild].life.min > 0)
	  points[i].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild-1].life.min > 0)
	  points[i].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

	if(points[lchild+1].life.min > 0)
	  points[i].XplusG.min=points[i+1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild+2].life.min > 0)
	  points[i].XplusG.min=points[i+1].XplusG.min=
	    points[lchild+2].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild-2].life.min > 0)
	  points[i-1].XplusG.min=
	    points[lchild-1].XplusG.min=1;

	if(points[lchild+3].life.min > 0)
	  points[i+1].XplusG.min=
	    points[lchild+2].XplusG.min=1;

	if(points[lchild+4].life.min > 0)
	  points[i+1].XplusG.min=1;

	if(points[lchild-3].life.min > 0)
	  points[i-1].XplusG.min=1;

	if(points[rightdad].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=
	    points[i-1].XplusG.min=1;

	if(points[rightdad-1].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[i].XplusG.min=points[i-1].XplusG.min=1;

	if(points[nextcount].life.min > 0)
	  points[rightdad-1].XplusG.min=1;

	if(points[rightdad+1].life.min > 0)
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

	if(points[i-1].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[i].XplusG.min=points[i-1].XplusG.min=1;

	if(points[i-2].life.min > 0)
	  points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

	if(points[i+1].life.min > 0)
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=
	    points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	    points[i].XplusG.min=1;

	if(points[i+2].life.min > 0)
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

	if(points[counter].life.min > 0)
	  points[rightdad-1].XplusG.min=1;

	if(points[gdad+1].life.min > 0)
	  points[rightdad].XplusG.min=1;

	if(points[gdad].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

	if(points[nnextcount].life.min > 0)
	  points[rightdad-1].XplusG.min=1;
      }

      if(i==(counter-2)){
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=0;

	if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[gchild-2].life.min > 0)||(points[gchild-1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

	if((points[gchild-3].life.min > 0)||(points[gchild-4].life.min > 0))
	  points[lchild-1].XplusG.min=1;

	if((points[gchild+2].life.min > 0)||(points[gchild+3].life.min > 0))
	  points[lchild+2].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[gchild+4].life.min > 0)||(points[gchild+5].life.min > 0))
	  points[lchild+2].XplusG.min=1;

	if(points[lchild].life.min > 0)
	  points[i].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild-1].life.min > 0)
	  points[i].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

	if(points[lchild+1].life.min > 0)
	  points[i].XplusG.min=points[i+1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild+2].life.min > 0)
	  points[i].XplusG.min=points[i+1].XplusG.min=
	    points[lchild+2].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild-2].life.min > 0)
	  points[i-1].XplusG.min=
	    points[lchild-1].XplusG.min=1;

	if(points[lchild+3].life.min > 0)
	  points[i+1].XplusG.min=
	    points[lchild+2].XplusG.min=1;

	if(points[lchild+4].life.min > 0)
	  points[i+1].XplusG.min=1;

	if(points[lchild-3].life.min > 0)
	  points[i-1].XplusG.min=1;

	if(points[rightdad].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=1;
	
	if(points[rightdad-1].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=
	    points[i-1].XplusG.min=1;

	if(points[rightdad-2].life.min > 0)
	  points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

	if(points[counter+1].life.min > 0)
	  points[rightdad].XplusG.min=1;

	if(points[i-1].life.min > 0)
	  points[rightdad-1].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[i].XplusG.min=1;

	if(points[i-2].life.min > 0)
	  points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

	if(points[i+1].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=1;

	if(points[i+2].life.min > 0)
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

	if(points[lastcount+1].life.min > 0)
	  points[rightdad].XplusG.min=1;

	if(points[nextcount+1].life.min > 0)
	  points[rightdad].XplusG.min=1;

	if(points[gdad].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

	if(points[gdad-1].life.min > 0)
	  points[rightdad-1].XplusG.min=1;
      }

      if(i==(counter-1)){
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=0;

	if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[gchild-2].life.min > 0)||(points[gchild-1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

	if((points[gchild-3].life.min > 0)||(points[gchild-4].life.min > 0))
	  points[lchild-1].XplusG.min=1;

	if((points[gchild+2].life.min > 0)||(points[gchild+3].life.min > 0))
	  points[lchild+2].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[gchild+4].life.min > 0)||(points[gchild+5].life.min > 0))
	  points[lchild+2].XplusG.min=1;

	if(points[lchild].life.min > 0)
	  points[i].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild-1].life.min > 0)
	  points[i].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

	if(points[lchild+1].life.min > 0)
	  points[i].XplusG.min=points[i+1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild+2].life.min > 0)
	  points[i].XplusG.min=points[i+1].XplusG.min=
	    points[lchild+2].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild-2].life.min > 0)
	  points[i-1].XplusG.min=
	    points[lchild-1].XplusG.min=1;

	if(points[lchild+3].life.min > 0)
	  points[i+1].XplusG.min=
	    points[lchild+2].XplusG.min=1;

	if(points[llastcount+1].life.min > 0)
	  points[i+1].XplusG.min=1;

	if(points[lchild-3].life.min > 0)
	  points[i-1].XplusG.min=1;

	if(points[rightdad].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[i].XplusG.min=points[i+1].XplusG.min=
	    points[i-1].XplusG.min=1;

	if(points[rightdad-1].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[i].XplusG.min=points[i-1].XplusG.min=1;

	if(points[rightdad-2].life.min > 0)
	  points[rightdad-1].XplusG.min=1;

	if(points[counter+1].life.min > 0)
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

	if(points[i-1].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[i].XplusG.min=points[i-1].XplusG.min=1;

	if(points[i-2].life.min > 0)
	  points[rightdad-1].XplusG.min=points[i-1].XplusG.min=1;

	if(points[i+1].life.min > 0)
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=
	    points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	    points[i].XplusG.min=1;

	if(points[lastcount+1].life.min > 0)
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

	if(points[i-3].life.min > 0)
	  points[rightdad-1].XplusG.min=1;

	if(points[nextcount+1].life.min > 0)
	  points[rightdad].XplusG.min=1;

	if(points[gdad].life.min > 0)
	  points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;

	if(points[gdad-1].life.min > 0)
	  points[rightdad-1].XplusG.min=1;
      }

      if(i==counter){
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[nextcount].XplusG.min=points[counter+1].XplusG.min=
	  points[lastcount+1].XplusG.min=points[llastcount+1].XplusG.min=
	  points[lchild+1].XplusG.min=0;

	if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[gchild-2].life.min > 0)||(points[gchild-1].life.min > 0))
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

	if((points[gchild-3].life.min > 0)||(points[gchild-4].life.min > 0))
	  points[lchild-1].XplusG.min=1;

	if((points[gchild+2].life.min > 0)||(points[lllastcount+1].life.min > 0))
	  points[llastcount+1].XplusG.min=points[lchild+1].XplusG.min=1;

	if((points[lllastcount+2].life.min > 0)||(points[lllastcount+3].life.min > 0))
	  points[llastcount+1].XplusG.min=1;

	if(points[lchild].life.min > 0)
	  points[i].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild-1].life.min > 0)
	  points[i].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

	if(points[lchild+1].life.min > 0)
	  points[i].XplusG.min=points[lastcount+1].XplusG.min=
	    points[lchild].XplusG.min=points[llastcount+1].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[llastcount+1].life.min > 0)
	  points[i].XplusG.min=points[lastcount+1].XplusG.min=
	    points[llastcount+1].XplusG.min=
	    points[lchild+1].XplusG.min=1;

	if(points[lchild-2].life.min > 0)
	  points[i-1].XplusG.min=
	    points[lchild-1].XplusG.min=1;

	if(points[llastcount+2].life.min > 0)
	  points[lastcount+1].XplusG.min=
	    points[llastcount+1].XplusG.min=1;

	if(points[llastcount+3].life.min > 0)
	  points[lastcount+1].XplusG.min=1;

	if(points[lchild-3].life.min > 0)
	  points[i-1].XplusG.min=1;

	if(points[counter+1].life.min > 0)
	  points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	    points[i].XplusG.min=points[lastcount+1].XplusG.min=1;
	
	if(points[nextcount].life.min > 0)
	  points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	    points[i].XplusG.min=points[lastcount+1].XplusG.min=
	    points[i-1].XplusG.min=1;

	if(points[nextcount-1].life.min > 0)
	  points[nextcount].XplusG.min=points[i-1].XplusG.min=1;

	if(points[counter+2].life.min > 0)
	  points[counter+1].XplusG.min=1;

	if(points[i-1].life.min > 0)
	  points[nextcount].XplusG.min=points[i-1].XplusG.min=
	    points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	    points[i].XplusG.min=1;

	if(points[i-2].life.min > 0)
	  points[nextcount].XplusG.min=points[i-1].XplusG.min=1;

	if(points[lastcount+1].life.min > 0)
	  points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	    points[lchild+1].XplusG.min=points[llastcount+1].XplusG.min=
	    points[i].XplusG.min=points[lastcount+1].XplusG.min=1;

	if(points[lastcount+2].life.min > 0)
	  points[counter+1].XplusG.min=points[lastcount+1].XplusG.min=1;

	if(points[lastcount+3].life.min > 0)
	  points[counter+1].XplusG.min=1;

	if((points[nnextcount].life.min > 0)||(points[nextcount+1].life.min > 0))
	  points[counter+1].XplusG.min=points[nextcount].XplusG.min=1;
      }
    }
  }

  /* Now deal with 3rd last row (only contains 4 points). */
  lllastcount=llastcount;
  llastcount=lastcount;
  lastcount=counter;
  counter=nextcount;
  nextcount=nnextcount;
  nnextcount+=pow(2,(double) (size-j-3));
  if(lastcount<i && counter>=i){
    rightdad=counter+1+(i-lastcount-1+(i%2))/2;
    gdad=nextcount+(rightdad-counter-1+(rightdad%2))/2;
    lchild=llastcount+(i-lastcount)*2-1;
    gchild=lllastcount+(lchild-llastcount)*2;

    if(i==lastcount+1){
      points[i].XplusG.min=points[counter].XplusG.min=
	points[lchild].XplusG.min=points[lastcount].XplusG.min=
	points[lchild+2].XplusG.min=points[nextcount].XplusG.min=
	points[i+1].XplusG.min=points[rightdad].XplusG.min=
	points[lchild+1].XplusG.min=0;

      if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
	points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

      if((points[llastcount].life.min > 0)||(points[gchild-1].life.min > 0))
	points[lchild].XplusG.min=points[lastcount].XplusG.min=1;

      if((points[llastcount-1].life.min > 0)||(points[llastcount-2].life.min > 0))
	points[lastcount].XplusG.min=1;

      if((points[gchild+2].life.min > 0)||(points[gchild+3].life.min > 0))
	points[lchild+2].XplusG.min=points[lchild+1].XplusG.min=1;

      if((points[gchild+4].life.min > 0)||(points[gchild+5].life.min > 0))
	points[lchild+2].XplusG.min=1;

      if(points[lchild].life.min > 0)
	points[i].XplusG.min=points[counter].XplusG.min=
	  points[lchild].XplusG.min=points[lastcount].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lastcount].life.min > 0)
	points[i].XplusG.min=points[counter].XplusG.min=
	  points[lchild].XplusG.min=points[lastcount].XplusG.min=1;

      if(points[lchild+1].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild+2].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lastcount-1].life.min > 0)
	points[counter].XplusG.min=
	  points[lastcount].XplusG.min=1;

      if(points[lchild+3].life.min > 0)
	points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=1;

      if(points[lchild+4].life.min > 0)
	points[i+1].XplusG.min=1;

      if(points[lastcount-2].life.min > 0)
	points[counter].XplusG.min=1;

      if(points[counter+1].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=
	  points[counter].XplusG.min=1;
    
      if(points[nextcount].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	  points[i].XplusG.min=points[counter].XplusG.min=
	  points[i+1].XplusG.min=1;

      if(points[counter].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	  points[lchild].XplusG.min=points[lastcount].XplusG.min=
	  points[i].XplusG.min=points[counter].XplusG.min=1;
    
      if(points[counter-1].life.min > 0)
	points[nextcount].XplusG.min=points[counter].XplusG.min=
	  points[counter+1].XplusG.min=points[i+1].XplusG.min=1;
    
      if(points[i+1].life.min > 0)
	points[nextcount].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[i].XplusG.min=points[counter+1].XplusG.min=1;

      if(points[nnextcount].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=1;
    }

    if(i==lastcount+2){
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	points[i-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=0;

      if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
	points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

      if((points[gchild-2].life.min > 0)||(points[gchild-1].life.min > 0))
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

      if((points[gchild-3].life.min > 0)||(points[gchild-4].life.min > 0))
	points[lchild-1].XplusG.min=1;

      if((points[gchild+2].life.min > 0)||(points[gchild+3].life.min > 0))
	points[lchild+2].XplusG.min=points[lchild+1].XplusG.min=1;

      if((points[gchild+4].life.min > 0)||(points[gchild+5].life.min > 0))
	points[lchild+2].XplusG.min=1;

      if(points[lchild].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-1].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

      if(points[lchild+1].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild+2].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-2].life.min > 0)
	points[i-1].XplusG.min=
	  points[lchild-1].XplusG.min=1;

      if(points[lchild+3].life.min > 0)
	points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=1;

      if(points[lchild+4].life.min > 0)
	points[i+1].XplusG.min=1;

      if(points[lastcount].life.min > 0)
	points[i-1].XplusG.min=1;

      if(points[rightdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=
	  points[i-1].XplusG.min=1;

      if(points[rightdad-1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=
	  points[i-1].XplusG.min=1;

      if(points[i-1].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i].XplusG.min=points[rightdad].XplusG.min=1;

      if(points[counter].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

      if(points[i+1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=1;

      if(points[gdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;
    }

    if(i==(counter-1)){
      points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	points[i-1].XplusG.min=
	points[i].XplusG.min=points[i+1].XplusG.min=0;

      if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
	points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

      if((points[gchild-2].life.min > 0)||(points[gchild-1].life.min > 0))
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

      if((points[gchild-3].life.min > 0)||(points[gchild-4].life.min > 0))
	points[lchild-1].XplusG.min=1;

      if((points[gchild+2].life.min > 0)||(points[gchild+3].life.min > 0))
	points[lchild+2].XplusG.min=points[lchild+1].XplusG.min=1;

      if((points[gchild+4].life.min > 0)||(points[gchild+5].life.min > 0))
	points[lchild+2].XplusG.min=1;

      if(points[lchild].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-1].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

      if(points[lchild+1].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild+2].life.min > 0)
	points[i].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-2].life.min > 0)
	points[i-1].XplusG.min=
	  points[lchild-1].XplusG.min=1;

      if(points[lchild+3].life.min > 0)
	points[i+1].XplusG.min=
	  points[lchild+2].XplusG.min=1;

      if(points[llastcount+1].life.min > 0)
	points[i+1].XplusG.min=1;

      if(points[lchild-3].life.min > 0)
	points[i-1].XplusG.min=1;

      if(points[rightdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i+1].XplusG.min=
	  points[i-1].XplusG.min=1;

      if(points[rightdad-1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[i].XplusG.min=points[i-1].XplusG.min=
	  points[i+1].XplusG.min=1;

      if(points[i-1].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i].XplusG.min=points[i-1].XplusG.min=1;

      if(points[i-2].life.min > 0)
	points[rightdad-1].XplusG.min=points[i-1].XplusG.min=
	  points[rightdad].XplusG.min=points[i+1].XplusG.min=1;

      if(points[i+1].life.min > 0)
	points[rightdad].XplusG.min=points[i+1].XplusG.min=
	  points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	  points[i].XplusG.min=points[rightdad-1].XplusG.min=1;

      if(points[gdad].life.min > 0)
	points[rightdad].XplusG.min=points[rightdad-1].XplusG.min=1;
    }

    if(i==counter){
      points[i].XplusG.min=points[i-1].XplusG.min=
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	points[nextcount].XplusG.min=points[counter+1].XplusG.min=
	points[lastcount+1].XplusG.min=points[llastcount+1].XplusG.min=
	points[lchild+1].XplusG.min=0;

      if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
	points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

      if((points[gchild-2].life.min > 0)||(points[gchild-1].life.min > 0))
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

      if((points[gchild-3].life.min > 0)||(points[gchild-4].life.min > 0))
	points[lchild-1].XplusG.min=1;

      if((points[gchild+2].life.min > 0)||(points[lllastcount+1].life.min > 0))
	points[llastcount+1].XplusG.min=points[lchild+1].XplusG.min=1;

      if((points[lllastcount+2].life.min > 0)||(points[lllastcount+3].life.min > 0))
	points[llastcount+1].XplusG.min=1;

      if(points[lchild].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-1].life.min > 0)
	points[i].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

      if(points[lchild+1].life.min > 0)
	points[i].XplusG.min=points[lastcount+1].XplusG.min=
	  points[lchild].XplusG.min=points[llastcount+1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[llastcount+1].life.min > 0)
	points[i].XplusG.min=points[lastcount+1].XplusG.min=
	  points[llastcount+1].XplusG.min=
	  points[lchild+1].XplusG.min=1;

      if(points[lchild-2].life.min > 0)
	points[i-1].XplusG.min=
	  points[lchild-1].XplusG.min=1;

      if(points[llastcount+2].life.min > 0)
	points[lastcount+1].XplusG.min=
	  points[llastcount+1].XplusG.min=1;

      if(points[llastcount+3].life.min > 0)
	points[lastcount+1].XplusG.min=1;

      if(points[lchild-3].life.min > 0)
	points[i-1].XplusG.min=1;

      if(points[counter+1].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	  points[i].XplusG.min=points[lastcount+1].XplusG.min=
	  points[i-1].XplusG.min=1;
	
      if(points[nextcount].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	  points[i].XplusG.min=points[lastcount+1].XplusG.min=
	  points[i-1].XplusG.min=1;

      if(points[i-1].life.min > 0)
	points[nextcount].XplusG.min=points[i-1].XplusG.min=
	  points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	  points[i].XplusG.min=points[counter+1].XplusG.min=1;

      if(points[i-2].life.min > 0)
	points[nextcount].XplusG.min=points[i-1].XplusG.min=
	  points[counter+1].XplusG.min=points[lastcount+1].XplusG.min=1;

      if(points[lastcount+1].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=
	  points[lchild+1].XplusG.min=points[llastcount+1].XplusG.min=
	  points[i].XplusG.min=points[lastcount+1].XplusG.min=1;

      if(points[nnextcount].life.min > 0)
	points[counter+1].XplusG.min=points[nextcount].XplusG.min=1;
    }
  }

  /* Deal with the second last row (two points). */
  lllastcount=llastcount;
  llastcount=lastcount;
  lastcount=counter;
  counter=nextcount;
  nextcount=nnextcount;
  lchild=llastcount+(i-lastcount)*2-1;
  gchild=lllastcount+(lchild-llastcount)*2;

  if(i==lastcount+1){
    points[lastcount+1].XplusG.min=points[counter].XplusG.min=
      points[nextcount].XplusG.min=points[lastcount].XplusG.min=
      points[llastcount+1].XplusG.min=points[llastcount+2].XplusG.min=
      points[lastcount-1].XplusG.min=0;

    if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
      points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

    if((points[llastcount].life.min > 0)||(points[gchild-1].life.min > 0))
      points[lchild].XplusG.min=points[lastcount].XplusG.min=1;

    if((points[llastcount-1].life.min > 0)||(points[llastcount-2].life.min > 0))
      points[lastcount].XplusG.min=points[lchild+2].XplusG.min=1;

    if((points[gchild+2].life.min > 0)||(points[gchild+3].life.min > 0))
      points[lchild+2].XplusG.min=points[lchild+1].XplusG.min=1;

    if(points[lchild].life.min > 0)
      points[i].XplusG.min=points[counter].XplusG.min=
	points[lchild].XplusG.min=points[lastcount].XplusG.min=
	points[lchild+1].XplusG.min=1;

    if(points[lastcount].life.min > 0)
      points[i].XplusG.min=points[counter].XplusG.min=
	points[lchild].XplusG.min=points[lastcount].XplusG.min=
	points[lastcount-1].XplusG.min=1;

    if(points[lchild+1].life.min > 0)
      points[i].XplusG.min=points[i+1].XplusG.min=
	points[lchild].XplusG.min=points[lchild+2].XplusG.min=
	points[lchild+1].XplusG.min=1;

    if(points[lchild+2].life.min > 0)
      points[i].XplusG.min=points[i+1].XplusG.min=
	points[lchild+2].XplusG.min=points[counter].XplusG.min=
	points[lastcount].XplusG.min=
	points[lchild+1].XplusG.min=1;

    if(points[nextcount].life.min > 0)
      points[nextcount].XplusG.min=points[i].XplusG.min=
	points[counter].XplusG.min=1;
    
    if(points[counter].life.min > 0)
      points[nextcount].XplusG.min=points[lchild].XplusG.min=
	points[lchild+1].XplusG.min=points[lchild+2].XplusG.min=
	points[lastcount].XplusG.min=points[i].XplusG.min=
	points[counter].XplusG.min=1;
  }

  if(i==counter){
    points[lastcount+1].XplusG.min=points[counter].XplusG.min=
      points[nextcount].XplusG.min=points[lastcount].XplusG.min=
      points[llastcount+1].XplusG.min=points[llastcount+2].XplusG.min=
      points[lastcount-1].XplusG.min=0;

    if((points[gchild].life.min > 0)||(points[gchild+1].life.min > 0))
      points[lchild].XplusG.min=points[lchild+1].XplusG.min=1;

    if((points[gchild-2].life.min > 0)||(points[gchild-1].life.min > 0))
      points[lchild].XplusG.min=points[lchild-1].XplusG.min=1;

    if((points[gchild-3].life.min > 0)||(points[gchild-4].life.min > 0))
      points[lchild-1].XplusG.min=points[llastcount+1].XplusG.min=1;

    if((points[gchild+2].life.min > 0)||(points[lllastcount+1].life.min > 0))
      points[llastcount+1].XplusG.min=points[lchild+1].XplusG.min=1;

    if(points[lchild].life.min > 0)
      points[i].XplusG.min=points[i-1].XplusG.min=
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	points[lchild+1].XplusG.min=1;

    if(points[lchild-1].life.min > 0)
      points[i].XplusG.min=points[i-1].XplusG.min=
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	points[lchild-2].XplusG.min=1;

    if(points[lchild+1].life.min > 0)
      points[i].XplusG.min=points[lastcount+1].XplusG.min=
	points[lchild].XplusG.min=points[llastcount+1].XplusG.min=
	points[lchild+1].XplusG.min=1;

    if(points[llastcount+1].life.min > 0)
      points[i].XplusG.min=points[lastcount+1].XplusG.min=
	points[llastcount+1].XplusG.min=points[lchild-1].XplusG.min=
	points[lchild+1].XplusG.min=1;

    if(points[nextcount].life.min > 0)
      points[nextcount].XplusG.min=points[i].XplusG.min=
	points[lastcount+1].XplusG.min=1;

    if(points[i-1].life.min > 0)
      points[nextcount].XplusG.min=points[i-1].XplusG.min=
	points[lchild].XplusG.min=points[lchild-1].XplusG.min=
	points[lchild+1].XplusG.min=points[llastcount+1].XplusG.min=
	points[i].XplusG.min=1;
  }
  /* Finally deal with the last point */
  lllastcount=llastcount;
  llastcount=lastcount;
  lastcount=counter;
  counter=nextcount;
  
  if(i==counter){
    points[llastcount+1].XplusG.min=points[lastcount].XplusG.min=
      points[counter].XplusG.min=0;

    if((points[lllastcount+1].life.min > 0)||
       (points[lllastcount+2].life.min > 0)||
       (points[llastcount-1].life.min > 0)||
       (points[llastcount].life.min > 0))
      points[llastcount+1].XplusG.min=points[lastcount].XplusG.min=1;

    if((points[llastcount+1].life.min > 0)||(points[lastcount].life.min > 0))
      points[llastcount+1].XplusG.min=points[lastcount].XplusG.min=
	points[counter].XplusG.min=1;
    /* Done */
  }
}
