; 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)
OyBiaW5hcnkgY29uY2F0ZW5hdGlvbgoKKGRlZmluZSAoZiBuKQogIChsZXQgbG9vcCAoKGkgMSkgKHMgMCkgKHAgMSkpCiAgICAod2hlbiAoPSBpIHApIChzZXQhIHAgKCsgcCBwKSkpCiAgICAoaWYgKDwgbiBpKSBzCiAgICAgIChsb29wICgrIGkgMSkgKG1vZHVsbyAoKyAoKiBzIHApIGkpIDEwMDAwMDAwMDcpIHApKSkpCgooZGlzcGxheSAoZiA0KSkgKG5ld2xpbmUpCihkaXNwbGF5IChmIDEwKSkgKG5ld2xpbmUp