pub trait MoveCursor<S: PlanningSolution, M: Move<S>> {
// Required methods
fn next_candidate(&mut self) -> Option<(usize, MoveCandidateRef<'_, S, M>)>;
fn candidate(&self, index: usize) -> Option<MoveCandidateRef<'_, S, M>>;
fn take_candidate(&mut self, index: usize) -> M;
}