public LinkedList<LinkedList<Vertex>> _toVertexArray(boolean SHOULD_IGNORE_START_END_NODES){
		// For the main store of vertices
		LinkedList<LinkedList<Vertex>> mainResult = new LinkedList<LinkedList<Vertex>>();
		
		LinkedList<Vertex> newResult = new LinkedList<Vertex>();
		LinkedList<Vertex> currentLL = new LinkedList<Vertex>();
		
		num+= 10;
		boolean inSquares = false;
		// Iterate through each node in the trace		
		for(Vertex v: nodes){
			// Check if the node is actually a trace trapped in a vertex body
			if(v.isTrace){	// It is, so lets process it as a trace. 
				// In square is used to group traces next to each other, i.e. <a, [<b,c>,<d,e>],f >
				// for the group in the square <b,c>,<d,e>, the group should be OCP'd together (to get the result:
				// <b,c,d,e>, <b,d,c,e>, <b,d,e,c>, <d,b,c,e> ... etc. 
				if(!inSquares){
					inSquares = true;
				}
				Trace t = (Trace)v;	// We expand the this trace into a list of lists of elements. 
				LinkedList<LinkedList<Vertex>> newvArray = t._toVertexArray(IGNORE_START_END_NODES_IN_TRACE) ;
				// Result should be a list of possible alternatives. 
				// [<s, a,b, e>,<s, c,d, e>,<s, d,f, e>]
				
				for(LinkedList<Vertex> ele : newvArray){
					//a.e.println("Adding " + _num + " :: " + ele);
					currentLL.addAll(ele);

				}
				//currentLL.addAll(newvArray);
				
			}else{
				if(inSquares){
						inSquares = false;
						// Process LL's
//						a.e.print("1--");
						LinkedList<Vertex> returnedResults = _processGroupsOfParallelNodes(currentLL);
						newResult.addAll(returnedResults); // .substring(0, currentString.length()/2));
				}
				
				newResult.add(v);
			}
			
			if(v == nodes.getLast()){
				if(inSquares){
						inSquares = false;
//						a.e.print("2--");
						LinkedList<Vertex> returnedResults = _processGroupsOfParallelNodes(currentLL);
						newResult.addAll(returnedResults); // .substring(0, currentString.length()/2));
				}
			}
			
		}
		mainResult.add(newResult);
		return mainResult;
	}