Solving A Real-World Rail Maintenance Scheduling Problem