def solve(failure_message = "No solution.")
      amb = self.new
      yield(amb)
    rescue Amb::ExhaustedError => ex
      puts
      puts "#{amb.branches_count} branches explored." if $DEBUG
      amb.report(failure_message)
    end
def solve(failure_message = "No solution.")
      amb = self.new
      yield(amb)
    rescue Amb::ExhaustedError => ex
      puts
      puts "#{amb.branches_count} branches explored." if $DEBUG
      amb.report(failure_message)
    end
Class convenience method to search for the first solution to the
 constraints.