Basically all we have to do is build a schedule for the professors and students. The thing is
there are several things that should be considered.
Things that should be considered
[0,n] students choose their preferences
is probable graduate
wants n electives
[0,n] required disciplines
[0,n] elective disciplines and their weights
[0,n] professors choose their preferences
[0,n] disciplines he can lecture and the amount of students per class
[0,n] disciplines he is willing to lecture and the amount of students per class
semesters he is not capable to lecture
periods he does not want to lecture
[0,n] courses should have their restrictions
[0,n] required disciplines must be taught.
[0,n] semesters of required disciplines must be feasable
Disciplines cannot colide with disciplines on the same semester
unless there is another one that doesn't.