; binary concatenation

(define (f n)
  (let loop ((i 1) (s 0) (p 1))
    (when (= i p) (set! p (+ p p)))
    (if (< n i) s
      (loop (+ i 1) (modulo (+ (* s p) i) 1000000007) p))))

(display (f 4)) (newline)
(display (f 10)) (newline)