public static ExpansionDecisions calculateIdealExpansion(BotState state, SuperRegion superRegion) {
		ExpansionDecisions out = new ExpansionDecisions();
		List<Region> missingRegions = superRegion.getMissingRegions(state);
		/*
		 * If it's not possible for us to take the SuperRegion in one turn due
		 * to not all missing regions visible return null.
		 */
		for (Region missingRegion : missingRegions) {
			if (missingRegion.getOwnedNeighbors(state).size() == 0) {
				return null;
			}
		}
		/*
		 * If there are bordering owned regions with enough armies to take the
		 * region then choose that region which borders the least amount of
		 * missing regions. If there is no such region then add armies to the
		 * bordering region with the highest amount of idle armies and then let
		 * this region take the missing region.
		 */
		for (Region missingRegion : missingRegions) {
			Region bestNeighborRegion = getBestNeighborRegion(missingRegion, out, state, superRegion);
			int missingArmies = getMissingArmies(bestNeighborRegion, missingRegion, out);
			if (missingArmies > 0) {
				out.neededArmyPlacement = out.neededArmyPlacement + missingArmies;
				out.armyPlacement.add(new PlaceArmiesMove(state.getMyPlayerName(), bestNeighborRegion, missingArmies));
			}
			if (missingRegion.getArmies() == 1) {
				out.expansionMoves.add(new AttackTransferMove(state.getMyPlayerName(), bestNeighborRegion,
						missingRegion, 2));
			} else {
				out.expansionMoves.add(new AttackTransferMove(state.getMyPlayerName(), bestNeighborRegion,
						missingRegion, 3));
			}
		}
		return out;
	}