*FA=I;     /* number of neg and pos int-names in FA */
  I=-1;    /* I = index for PATH; K = object at location I */


/* Start with an object in a new component */
LP1:
 I++; PATH[I]=0;
  /*  0 before and after all objects in a path covering a component */
 K=0;
 for (J=Nobj; J>0; J--) if (!VISITED[J]) K=J;
      /* try to get a startobj in component */
 if (!K) return;    /* All objects visited, no more additions to path */
 STARTOBJ=K;  I++; PATH[I]=STARTOBJ;  VISITED[STARTOBJ]=STARTOBJ;
    printf("(A) I=%d STARTOBJ=%d\n",I,K);      getchar();
          /* first object in both path an new component */

LP2:
  while (NUMPOS[K])      /* Increase path forward with new objects */
  {
   J = FA[NEGOBJ[K] + NUMPOS[K]]; NUMPOS[K]--;   if (VISITED[J]) goto LP2;
   I++; PATH[I]=K=J;        printf("(C) I=%d NUMPOSK=%d  K=%d\n",I,NUMPOS[K],K);
  }

   /* if (K==STARTJOB) {K=0; goto LP;}; */

 printf("(D) Dead end with ,no exit; I=%d NUMPOSK=%d  K=%d\n",I,NUMPOS[K],K);
  /* Path reached a dead-end (object has no unvisited neighbors */
        /* Start backtracking in path;  J = index during backtracking */
 J=I;
 while (!NUMPOS[K])
  {
   J--; K=PATH[J];
   I++; PATH[I]=K;          printf("(E) I=%d NUMPOSK=%d  K=%d\n",I,NUMPOS[K],K);
   if (!K) goto LP1;
  }                         printf("(F) I=%d NUMPOSK=%d  K=%d\n",I,NUMPOS[K],K);
 goto LP2;


