@SuppressWarnings("unused")
	private void goRecursive(NGraph<LBFSData> g, int round, NVertexOrder<D> order) {
		//Laatste ronde!
		if( order.order.size() == g.getNumberOfVertices() ) {
			//Reverse the list
			Collections.reverse(order.order);
			
			//Create the treedecomposition to get the upperbound 
			PermutationToTreeDecomposition<D> pttd = new PermutationToTreeDecomposition<D>(order);
			pttd.setInput(originalGraph);
			pttd.run();
			int newUpper = pttd.getUpperBound();
			if( upperbound > newUpper) {
				vertexOrder = new NVertexOrder<D>(order);
				upperbound = newUpper;				
			}
			//Reverse the list
			Collections.reverse(order.order);
		} else {		
		
			//Lijst waarin alle vertices staan waar we recursief op gaan
			ArrayList <NVertex<LBFSData>> biggest = new ArrayList<NVertex<LBFSData>>(); 
			
			//Zoek de vertices met grootste labels
			for(int j=0; j<g.getNumberOfVertices(); ++j) {
				NVertex<LBFSData> v = g.getVertex(j);
				
				//Only look at vertices that aren't numbered
				if( ! v.data.visited ) {
					
					//Set the first vertex as the init vertex
					if( biggest.size()==0 ) {						
						biggest.add(v);
					} else if( lexEqual( v.data.labels, biggest.get(0).data.labels ) ) {
						biggest.add(v);						
					}else if( lexBigger( v.data.labels, biggest.get(0).data.labels ) ) {
						biggest.clear();
						biggest.add(v);						
					}		
				}
			}
			int nextRound = round-1;
			
			//If you do not want to branch on all the items, set a tiebreak here.
			if(biggest.size()<=g.getNumberOfVertices()-1) {
				//int randIndex = (int)(Math.random() * biggest.size());
				int randIndex = biggest.size()-1;
				NVertex<LBFSData> v = biggest.get(randIndex);
				//Update buren en stop vertices in de lijst
				updateNeigbours(v, round );
				order.order.add( v.data.getOriginal() );
				
				goRecursive(g,nextRound,order);
				
				//Undo update buren en verwijder vertices uit de lijst.
				order.order.remove(v.data.getOriginal());
				reverseUpdateNeigbours(v,round);
			} else {
				for(NVertex<LBFSData> v : biggest) {
					//Update buren en stop vertices in de lijst
					updateNeigbours(v, round );
					order.order.add( v.data.getOriginal() );
					
					goRecursive(g,nextRound,order);
					
					//Undo update buren en verwijder vertices uit de lijst.
					order.order.remove(v.data.getOriginal());
					reverseUpdateNeigbours(v,round);
				}
			}
		}		
	}