(use util.queue) (define N (read)) (define v (make-vector (+ N 1) #f)) (let ([que (make-queue)]) (enqueue! que 1) (vector-set! v 1 1) (let loop () (cond [(queue-empty? que) (print (if (vector-ref v N) (vector-ref v N) -1))] [else (let* ([i (dequeue! que)] [c (logcount i)]) (cond [(and (<= (+ i c) N) (not (vector-ref v (+ i c)))) (vector-set! v (+ i c) (+ 1 (vector-ref v i))) (enqueue! que (+ i c))]) (cond [(and (> (- i c) 0) (not (vector-ref v (- i c)))) (vector-set! v (- i c) (+ 1 (vector-ref v i))) (enqueue! que (- i c))])) (loop)])))