}
    private void removeGapsWithEdgeConcentration(int nodesLevel[]) {		final int  temp = m_nodes.size(), temp2=graphMatrix[0].length;	int tempCnt=1;		for(int n=0; n<temp; n++) {	    for(int i=0; i<temp2; i++) {		if(graphMatrix[n][i]>0)		    if(nodesLevel[i]>nodesLevel[n]+1) {			//System.out.println("Processing node "+((GraphNode)m_nodes.elementAt(n)).ID+			//		   " for "+((GraphNode)m_nodes.elementAt(i)).ID);			int tempLevel=nodesLevel[n]; 			boolean tempNodePresent=false;			int k=temp;			int tempnode = n;						while(tempLevel < nodesLevel[i]-1 ) {			    tempNodePresent=false;			    for(; k<graphMatrix.length; k++) {				if(graphMatrix[tempnode][k]>0) { 				    //System.out.println("tempnode will be true"); 				    tempNodePresent = true; break;				}			    }			    if(tempNodePresent) {				tempnode=k; k=k+1;				tempLevel++;			    }			    else { 				if(tempnode!=n)				    tempnode=k-1; 				//System.out.println("breaking from loop"); 				break;			    }			}			if(((GraphNode)m_nodes.elementAt(tempnode)).nodeType==SINGULAR_DUMMY)			    ((GraphNode)m_nodes.elementAt(tempnode)).nodeType=PLURAL_DUMMY; 			if(tempNodePresent) {			    graphMatrix[tempnode][i] = graphMatrix[n][i];   //Link the last known temp node to target			    //System.out.println("modifying "+((GraphNode)nodes.elementAt(tempnode)).ID+			    //		   ", "+((GraphNode)nodes.elementAt(n)).ID);			    /////graphMatrix[tempnode][n] = -graphMatrix[n][i];  //matrix[lastknowntempnode][source]=-original_val			    //System.out.println("modifying "+((GraphNode)nodes.elementAt(i)).ID+			    //		   ", "+((GraphNode)nodes.elementAt(tempnode)).ID);			    graphMatrix[i][tempnode] = -graphMatrix[n][i];  //and matrix[target][lastknowntempnode]=-original_val				                                                   //for reverse tracing			    graphMatrix[n][i] = 0;                          //unlink source from the target			    graphMatrix[i][n] = 0;			    continue;                                            			    			}			    			int len = graphMatrix.length;			int tempMatrix[][] = 			    new int[graphMatrix.length+(nodesLevel[i]-nodesLevel[tempnode]-1)]			    [graphMatrix.length+(nodesLevel[i]-nodesLevel[tempnode]-1)];			int level = nodesLevel[tempnode]+1;			copyMatrix(graphMatrix, tempMatrix);						String s1 = new String("S"+tempCnt++);			//System.out.println("Adding dummy "+s1);			m_nodes.addElement(new GraphNode(s1, s1, SINGULAR_DUMMY));						int temp3 [] = new int[nodeLevels[level].length+1];			System.arraycopy(nodeLevels[level], 0, temp3, 0, nodeLevels[level].length);			temp3[temp3.length-1] = m_nodes.size()-1;			nodeLevels[level] = temp3; 			temp3 = new int[m_nodes.size()+1];			System.arraycopy(nodesLevel, 0, temp3, 0, nodesLevel.length);			temp3[m_nodes.size()-1] = level;			nodesLevel = temp3;			level++;			//nodeLevels[level++].addElement(new Integer(m_nodes.size()-1));			//System.out.println("len:"+len+"("+((GraphNode)m_nodes.elementAt(len)).ID+			//		   "),"+nodesLevel[i]+","+nodesLevel[tempnode]);						int m;			for(m=len; m<len+nodesLevel[i]-nodesLevel[tempnode]-1-1; m++) {			    String s2 =  new String("S"+tempCnt++);			    //System.out.println("Adding dummy "+s2);			    m_nodes.addElement( new GraphNode(s2, s2, SINGULAR_DUMMY) );			    temp3 = new int[nodeLevels[level].length+1];			    //for(int j=0; j<nodeLevels[level].length; j++)			    //	temp3[j] = nodeLevels[level][j];			    System.arraycopy(nodeLevels[level], 0, temp3, 0, nodeLevels[level].length);			    temp3[temp3.length-1] = m_nodes.size()-1;			    nodeLevels[level] = temp3;			    temp3 = new int[m_nodes.size()+1];			    System.arraycopy(nodesLevel, 0, temp3, 0, nodesLevel.length);			    temp3[m_nodes.size()-1] = level;			    nodesLevel = temp3;			    level++;			    //nodeLevels[level++].addElement(new Integer(m_nodes.size()-1));			    //System.out.println("modifying "+((GraphNode)nodes.elementAt(m)).ID+			    //		   ", "+((GraphNode)nodes.elementAt(m+1)).ID);			    tempMatrix[m][m+1]=tempMatrix[n][i]; //tempCnt++; 			    if(m>len) {				//System.out.println("modifying "+((GraphNode)nodes.elementAt(m)).ID+				//	       ", "+((GraphNode)nodes.elementAt(m-1)).ID);				tempMatrix[m][m-1]=-1*tempMatrix[n][i];			    }			}			//System.out.println("m "+((GraphNode)m_nodes.elementAt(m)).ID+			//		   " i "+((GraphNode)m_nodes.elementAt(i)).ID+			//		   " tempnode "+((GraphNode)m_nodes.elementAt(tempnode)).ID+			//		   " len "+((GraphNode)m_nodes.elementAt(len)).ID );			//System.out.println("modifying "+((GraphNode)nodes.elementAt(m)).ID+			//	       ", "+((GraphNode)nodes.elementAt(i)).ID);			tempMatrix[m][i]=tempMatrix[n][i];  //temp[lastTempNodeCreated][targetNode]=temp[origNode][targetNode]			//System.out.println("modifying "+((GraphNode)nodes.elementAt(tempnode)).ID+			//	       ", "+((GraphNode)nodes.elementAt(len)).ID);			tempMatrix[tempnode][len] = 			    tempMatrix[n][i]; //temp[origNode][firstTempNodecreated] = temp[origNode][targetNode]			//System.out.println("modifying "+((GraphNode)nodes.elementAt(len)).ID+			//	       ", "+((GraphNode)nodes.elementAt(tempnode)).ID);			tempMatrix[len][tempnode] = 			    -1*tempMatrix[n][i]; //temp[firstTempNodeCreated][origNode]  for reverse tracing			//System.out.println("modifying "+((GraphNode)nodes.elementAt(i)).ID+			//	       ", "+((GraphNode)nodes.elementAt(m)).ID);			tempMatrix[i][m]          = 			    -1*tempMatrix[n][i]; //temp[targetNode][lastTempNodecreated]  for reverse tracing			if(m>len) {			    //System.out.println("modifying "+((GraphNode)nodes.elementAt(m)).ID+		  	    //	   ", "+((GraphNode)nodes.elementAt(m-1)).ID);			    tempMatrix[m][m-1]    =       //temp[lastTempNodeCreated][secondlastNode] for reverse tracing 				-1*tempMatrix[n][i];      //but only do this if more than 1 temp nodes are created 			}			tempMatrix[n][i]   = 0;                //temp[origNode][targetNode] = 0 unlinking as they have been 			tempMatrix[i][n]   = 0;                // linked by a chain of temporary nodes now.									graphMatrix = tempMatrix;		    }		    else {			//System.out.println("modifying "+((GraphNode)nodes.elementAt(i)).ID+				//	       ", "+((GraphNode)nodes.elementAt(n)).ID);			//****Even if there is no gap just add a reference for the 			//****parent to the child for reverse tracing, useful if the			//****there is a reversed edge from parent to child and therefore			//****visualizer would know to highlight this edge  when 			//****highlighting the child.			graphMatrix[i][n]=-1*graphMatrix[n][i];		    }	    }	}	    }