private ArrayList<Group> setV1ToCoverNextTer(HashSet v1Marked, HashSet v1Set, ArrayList<Integer> uncoveredV2) {
		//v1Marked = conjuntos dos nos de I que ja foram marcados
		ArrayList<NodeDegree> sortedMarked = new ArrayList<NodeDegree>();
			Iterator<Integer> it = v1Marked.iterator();
			while(it.hasNext()) {
				int vId = it.next();
				sortedMarked.add(new NodeDegree(vId, quasiArborescence.getOutDegree(vId)));
			}
		//}
		
		Collections.sort(sortedMarked, new DegreeComparator());
		
		ArrayList<Group> groups = new ArrayList<Group>();
		
		ArrayList<Integer> newUncoveredV2 = uncoveredV2;
		
		for (int i = 0; (i < sortedMarked.size()) && (newUncoveredV2.size() > 0); i++) {
			Group group = new Group();
			
			ArrayList<Integer> uncoveredTerminals = new ArrayList<Integer>();
			for (int z = 0; z < newUncoveredV2.size(); z++) {
				int uncId = newUncoveredV2.get(z);
				uncoveredTerminals.add(uncId);
			}
			
			ArrayList<Double> uncoveredTerminalsDelay = new ArrayList<Double>();
			for (int s = 0; s < uncoveredTerminals.size(); s++) {
				for (int t = 0; t < uninformedTerminals.size(); t++) {
					if (uncoveredTerminals.get(s).intValue() == uninformedTerminals.get(t).intValue()) {
						uncoveredTerminalsDelay.add(uninformedTerminalsDelay.get(t));
						break;
					}
				}
			}
			
			newUncoveredV2 = setMSCGroupParametrized(v1Set, group, sortedMarked.get(i).getId(), uncoveredTerminals, uncoveredTerminalsDelay, false);
			if (newUncoveredV2.size() < uncoveredTerminals.size()) {
				groups.add(group);
			}//else - no uncoverd terminal turned to be covered
		}
		return groups;
	}