Solving a real-world rail maintenance scheduling problem