A simple, scalable and parameterized recursive approach to solve Timetabling Problems for multiple programs with Genetic Algorithms