public static ArrayList<Schedule> addNextCourse(Schedule sched, ArrayList<Schedule> desiredCourses, 
			int courseNum, int classNum, ArrayList<Schedule> allScheds, int schedMinSize){
		
		/*	If we've gone through each desired class, add the current
		 * schedule to the list of schedules and return */
		if (courseNum >= desiredCourses.size()){
			if (sched.getCourses().size() >= schedMinSize)
				if (!allScheds.contains(sched))
					allScheds.add(sched);
				
			return allScheds;
		}
		
		ArrayList<Course> classes = desiredCourses.get(courseNum).getCourses();
		/* If classNum is out of bounds, return  */
		if (classNum >= classes.size())
				return allScheds;
				
		/* find the next class that doesn't overlap classes in the 
		 * current schedule
		 */
		for (Course c : sched.getCourses()){
			while ((classNum < classes.size()) && (classes.get(classNum).overlaps(c))){
				classNum++;
			}
		}
		
		/*  if there are more classes in the current course listing, create another
		 * schedule and find more alternatives 	 */
		if (classNum < classes.size() - 1)
			addNextCourse(new Schedule(sched), desiredCourses, courseNum, classNum + 1, allScheds, schedMinSize);
		
		/*  if we've found a class that doesn't overlap the current schedule, then 
		 * add the class to the current schedule */
		if (classNum < classes.size())
			sched.addCourse(classes.get(classNum));
		
		/*  find the next class to add to the schedule */
		addNextCourse(sched, desiredCourses, courseNum + 1, 0, allScheds, schedMinSize);
		
		return allScheds;
	}