@Override
	public List<Schedule> mate(List<Schedule> mates) {
		List<Schedule> schedules = new ArrayList<Schedule>();
		
		Map<NFLEvent, List<Integer>> eventWeeks = new HashMap<NFLEvent, List<Integer>>();
		
		for(int i = 0; i < this.getWeeks().size(); i++) {
			Day d = this.weeks.get(i).getDay(0);
			for(NFLEvent e : d.getEvents()) {
				if(eventWeeks.get(e) == null) {
					eventWeeks.put(e, new ArrayList<Integer>());
				}
				eventWeeks.get(e).add(i);
			}
		}
		
		for(Schedule s : mates) {
			for(int i = 0; i < s.getWeeks().size(); i++) {
				Day d = s.weeks.get(i).getDay(0);
				for(NFLEvent e : d.getEvents()) {
					if(eventWeeks.get(e) == null) {
						eventWeeks.put(e, new ArrayList<Integer>());
					}
					eventWeeks.get(e).add(i);
				}
			}
		}
		
		Random random = new Random();
		for(int j = 0; j < 3; j++) {
			Schedule child = new Schedule(this.weeks.size());
			for(Entry<NFLEvent, List<Integer>> entry : eventWeeks.entrySet()) {
				int r = random.nextInt(entry.getValue().size());
				child.getWeeks().get(entry.getValue().get(r)).getDay(0).addEvent(entry.getKey());
			}
			schedules.add(child);
		}
		return schedules;
	}