Mathematical programming models and algorithms for a class-faculty assignment problem