First species counterpoint generation with variable neighbourhood search and vertical viewpoints