private static NetworkEdge chooseAnEnteringEdge() {
		int maximumNumberOfCandidates = 5;
		LinkedList<NetworkEdge> candidates = new LinkedList<NetworkEdge>();
		for (NetworkEdge e : lEdges.values()) {
			long rc = (Long) e.getData(reducedCostDataKey).getValue();
			if (rc < 0) {
				candidates.add(e);
			}
			if (candidates.size() >= maximumNumberOfCandidates) {
				break;
			}
		}
		if (candidates.size() < maximumNumberOfCandidates) {
			for (NetworkEdge e : uEdges.values()) {
				long rc = (Long) e.getData(reducedCostDataKey).getValue();
				if (rc > 0) {
					candidates.add(e);
				}
				if (candidates.size() >= maximumNumberOfCandidates) {
					break;
				}
			}
		}
		NetworkEdge enteringEdge = null;
		long rc = 0L;
		for (NetworkEdge e : candidates) {
			long erc = Math.abs((Long) e.getData(reducedCostDataKey).getValue());
			if (rc < erc) {
				rc = erc;
				enteringEdge = e;
			}
		}
		return enteringEdge;
	}