private static Region getBestNeighborRegion(Region missingRegion, ExpansionDecisions madeExpansionDecisions,
			BotState state, SuperRegion superRegion) {
		List<Region> ownedNeighbors = missingRegion.getOwnedNeighbors(state);
		int maximumIdleArmies = 0;
		// First calculate the maximum amount of armies of an owned neighbor.
		for (Region ownedNeighbbor : ownedNeighbors) {
			int idleArmies = getOverflowIdleArmies(ownedNeighbbor, madeExpansionDecisions);
			if (idleArmies > maximumIdleArmies) {
				maximumIdleArmies = idleArmies;
			}
		}
		// Second calculate the owned neighbor having the maximum amount of idle
		// armies while having a minimum amount of sill missing neighbors.
		int minimumMissingNeighbors = 1000;
		Region out = null;
		for (Region ownedNeighbor : ownedNeighbors) {
			int missingNeighborRegions = getStillMissingNeighborRegions(ownedNeighbor, state, madeExpansionDecisions,
					superRegion).size();
			if (getOverflowIdleArmies(ownedNeighbor, madeExpansionDecisions) == maximumIdleArmies
					&& missingNeighborRegions < minimumMissingNeighbors) {
				out = ownedNeighbor;
				minimumMissingNeighbors = missingNeighborRegions;
			}
		}
		return out;
	}