Some words about the algorithm:

FET uses a nice algorithm, placing the activities in turn, starting with the most difficult ones.
If it cannot find a solution it points you to the potential impossible activities, so you can 
correct errors. The algorithm swaps activities recursively if that is possible in order to make 
space for a new activity, or, in extreme cases, backtracks and switches order of evaluation.
The important code is in src/engine/generate.cpp. Please e-mail me for details or 
join the mailing list. The algorithm mimics the operation of a human timetabler, I think.

When placing an activity, I choose the place with lowest number of conflicting activities and
recursively replace them. I use a tabu list with size MAX_TABU to avoid cycles.

The maximum depth (level) of recursion is 14.

The maximum number of recursive calls is 2000 (modified 15 Aug. 2007).

The recursion chooses only one variant from depth 5 (modified 15 Aug. 2007) above, then it returns.

How to respect the students gaps (possible in combination with early)? Compute the number of
total hours per week for each subgroup, then when generating, the total span of lessons
should not exceed the total number of hours per week for the subgroup. The span is
computed differently if you have no gaps or if you have no gaps+early
