int StartDFS ()
  	{
  		cParent = -1;
  		System.out.println ("Starting DFS traversal from first node");
  		System.out.print ("Visiting nodes - ");
		for (Node node : nodes)
			if ((node.GetPrdCnt ()) == 0) // only start from nodes without predecessors
			{
				if (cParent == -1)
					cParent = node.GetSeqNo ();
				cIndex = 0;
				edges[cParent][cIndex] = 0; // length of path starting from this node
				if (!IsVisited (cParent))
				{
					Visit (cParent);
					edges[cParent][++cIndex] = cParent;
					Node[] suclist = node.GetSucc ();
					for (Node snode : suclist)
						if (snode != null)
							doDFS (snode);
					if (cParent == -1)
						cParent = node.GetSeqNo ();
				}
				if (lVisitLen < edges[cParent][0])
				{
					lVisitLen = edges[cParent][0];
					lVisitNode = cParent;
				}
				cParent = -1; // reset parent 
			}

		System.out.println ();
		
		System.out.println ("Total number of unique edges - " + eCnt);
		
		System.out.print ("Longest path of unique edges: length " + lVisitLen + " : ");
		for (int i = 1; i <= lVisitLen+1; i++)
			System.out.print (" - " + edges[lVisitNode][i]);

		System.out.println ();
		return lVisitLen;
  	}