; curious numbers

(define (expm b e m)
  (define (m* x y) (modulo (* x y) m))
  (cond ((zero? e) 1)
        ((even? e) (expm (m* b b) (/ e 2) m))
        (else (m* b (expm (m* b b) (/ (- e 1) 2) m)))))

(define (curious n)
  (let ((xs (list 1)))
    (do ((i 1 (+ i 1))) ((= i n) (apply + xs))
      (let* ((x (expm 5 (expt 2 i) (expt 10 i)))
             (y (- (expt 10 i) x -1)))
        (display i) (display ": ")
        (display x) (display " ")
        (display y) (newline)
        (when (not (member x xs))
          (set! xs (cons x xs)))
        (when (not (member y xs))
          (set! xs (cons y xs)))))))

(display (curious 20)) (newline)