   DGLSystem::Begsav();
   DGLSystem::interpret("30");
   lcl_value = DGLSystem::Endsav();
   TempVertexCount = strtol(lcl_value,NULL,0);
   free(lcl_value);
   if (TempVertexCount <= 0)
   {
      s = NULL;
   }
   else
   {
   MaxEdgeCount = ((TempVertexCount*TempVertexCount)-TempVertexCount);
   Used = (int *)calloc(TempVertexCount*TempVertexCount,sizeof(int));
   for (i=0 ; i<TempVertexCount*TempVertexCount ; i++)
   {
      Used[i] = 0;
   }
   TempAdj = new Edge *[TempVertexCount];
   for (i=0 ; i<TempVertexCount ; i++)
   {
      TempAdj[i] = NULL;
   }
   for (i=1 ; i<TempVertexCount ; i++)
   {
      j=RAND1(i);
      TempEdge = new Edge;
      TempEdge->Randomize();
      TempEdge->Next = TempAdj[j];
      TempAdj[j] = TempEdge;
      TempEdge->Vertex = i;
      Used[j*TempVertexCount+i] = 1;
   }
   ExtraEdges=0;
   int v,w;
   int GST,StackPtr;
   int *ST,*Low,*IST,*VStack;
   Edge **PStack;
   
   ST = new int[TempVertexCount];
   for (i=0; i<TempVertexCount ; i++)
   {
      ST[i] = -1;
   }
   Low = new int[TempVertexCount];
   IST = new int[TempVertexCount];
   VStack = new int[TempVertexCount];
   PStack = new Edge * [TempVertexCount];
   
   GST = 0;
   VStack[0] = 0;
   PStack[0] = TempAdj[0];
   StackPtr = 0;
   ST[0] = 0;
   Low[0] = 0;
   IST[0] = 0;
   while (StackPtr >= 0)
   {
      while (PStack[StackPtr] != NULL)
      {
         w = PStack[StackPtr]->Vertex;
         if (ST[w] == -1)
         {
            GST++;
            ST[w] = GST;
            IST[GST] = w;
            Low[w] = GST;
            PStack[StackPtr] = PStack[StackPtr]->Next;
            StackPtr++;
            VStack[StackPtr] = w;
            PStack[StackPtr] = TempAdj[w];
         }
         else
         {
            if (ST[w] < Low[VStack[StackPtr]])
            {
               Low[VStack[StackPtr]] = ST[w];
            }
            PStack[StackPtr] = PStack[StackPtr]->Next;
         }
      }
      if (StackPtr > 0)
      {
         v = VStack[StackPtr];
         StackPtr--;
         w = VStack[StackPtr];
         if (Low[v] == ST[v]) // Backing up from v
         {
            int x = RAND2(0,ST[v]-1);
            int y = RAND2(ST[v],GST);
            ExtraEdges++;
            Edge * t = new Edge;
            t->Randomize();
            t->Vertex = IST[x];
            t->Next = TempAdj[IST[y]];
            TempAdj[IST[y]] = t;
            Low[v] = x;
         }
         if (Low[v] < Low[w]) // Backing up to w
         {
            Low[w] = Low[v];
         }
      }
      else
      {
         StackPtr--;
      }
      
   }
   delete [] ST;
   delete [] Low;
   delete [] IST;
   delete [] VStack;
   delete [] PStack;
   TempEdgeCount = 0;
