private static Solution makeBaby(Solution mommy, Solution daddy, ArrayList<Car> allCars) {
		//Preserve a section of the mommy
		Solution baby = new Solution(new Rider[mommy.getRiders().length], 0, allCars);
		Rider[] mommysRiders = mommy.getRiders();
		Rider[] babysRiders = baby.getRiders();
		Rider[] daddysRiders = daddy.getRiders();
		int momStart = (int) ((Math.random()*babysRiders.length)/4);
		int momEnd = (int) ((Math.random()*babysRiders.length)/4);
		if (momEnd < momStart) {
		    int temp = momEnd;
		    momEnd = momStart;
		    momStart = temp;
		}
		for (int i=4*momStart; i<4*momEnd; i++) {
		    babysRiders[i] = mommysRiders[i];
		}
		
		//Preserve as much as possible from the daddy, adding ghosts
		Rider ghostRider = new Rider("BOOOOO!");
		List<Integer> ghostLocs = new ArrayList<Integer>();
		List<Rider> unassigned = new ArrayList<Rider>();
		for (int i=0; i<4*momStart; i++) {
		    //if (isRiderBetween(daddysRiders[i], babysRiders, 4*momStart, 4*momEnd)){
			if (isRiderIn(daddysRiders[i], babysRiders)) {
		    	babysRiders[i] = ghostRider;
				ghostLocs.add(i);
				unassigned.add(daddysRiders[i]);
		    } else {
		    	babysRiders[i] = daddysRiders[i];
		    }
		}
		for (int i=4*momEnd; i<babysRiders.length; i++) {
		    //if (isRiderBetween(daddysRiders[i], babysRiders, 0, babysRiders.length)){ //Daddy's rider is already accounted for
			if (isRiderIn(daddysRiders[i], babysRiders)) {
		    	babysRiders[i] = ghostRider;
		    	ghostLocs.add(i);
		    	unassigned.add(daddysRiders[i]);
		    } else {
		    	babysRiders[i] = daddysRiders[i];
		    }
		}
		//Replace the ghosts
		shuffleList(ghostLocs);
		shuffleList(unassigned);
		
		if ( ghostLocs.size() != unassigned.size()) {
			System.out.println("Mismatch: " + ghostLocs.size() + " " + unassigned.size());
		}
		
		for (int i=0; i<ghostLocs.size() && i<unassigned.size(); i++) {
		    babysRiders[ghostLocs.get(i)] = unassigned.get(i);
		}
		
		
		return baby;
    }