private static List<Region> calculateBestRegionsToTransferTo(BotState state, Region transferRegion) {
		List<Region> closestNeighborsToBorder = DistanceToBorderCalculator.getClosestOwnedNeighborsToBorder(state,
				transferRegion);
		Region closestNeighborToOpponent = transferRegion.getClosestOwnedNeighborToOpponentBorder(state);
		List<Region> out = new ArrayList<>();
		if (closestNeighborsToBorder.size() == 0 && closestNeighborToOpponent == null) {
			return out;
		}
		if (closestNeighborToOpponent == null) {
			return closestNeighborsToBorder;
		}
		if (closestNeighborsToBorder.size() == 0) {
			out.add(closestNeighborToOpponent);
			return out;
		}
		int distanceToBorder = closestNeighborsToBorder.get(0).getDistanceToBorder();
		int distanceToOpponentBorder = closestNeighborToOpponent.getDistanceToOpponentBorder();
		// heuristic when to transfer to opponent border instead of closest
		// border
		if (distanceToOpponentBorder <= distanceToBorder + 3) {
			out.add(closestNeighborToOpponent);
		} else {
			out.addAll(closestNeighborsToBorder);
		}

		return out;
	}