; minstack
(define empty (list))
(define empty? null?)
(define (push x minstack)
(if (empty? minstack) (cons (cons x x) minstack)
(cons (cons x (min x (least minstack))) minstack)))
(define pop cdr)
(define top caar)
(define least cdar)
(define ms empty)
(set! ms (push 4 ms))
(set! ms (push 3 ms))
(set! ms (push 7 ms))
(display ms) (newline)
(display (top ms)) (newline)
(display (least ms)) (newline)
(set! ms (pop ms))
(display (top ms)) (newline)
(display (least ms)) (newline)
(set! ms (pop ms))
(display (empty? ms)) (newline)
(display (top ms)) (newline)
(display (least ms)) (newline)
(set! ms (pop ms))
(display (empty? ms)) (newline)
OyBtaW5zdGFjawoKKGRlZmluZSBlbXB0eSAobGlzdCkpCihkZWZpbmUgZW1wdHk/IG51bGw/KQooZGVmaW5lIChwdXNoIHggbWluc3RhY2spCiAgKGlmIChlbXB0eT8gbWluc3RhY2spIChjb25zIChjb25zIHggeCkgbWluc3RhY2spCiAgICAoY29ucyAoY29ucyB4IChtaW4geCAobGVhc3QgbWluc3RhY2spKSkgbWluc3RhY2spKSkKKGRlZmluZSBwb3AgY2RyKQooZGVmaW5lIHRvcCBjYWFyKQooZGVmaW5lIGxlYXN0IGNkYXIpCgooZGVmaW5lIG1zIGVtcHR5KQooc2V0ISBtcyAocHVzaCA0IG1zKSkKKHNldCEgbXMgKHB1c2ggMyBtcykpCihzZXQhIG1zIChwdXNoIDcgbXMpKQooZGlzcGxheSBtcykgKG5ld2xpbmUpCihkaXNwbGF5ICh0b3AgbXMpKSAobmV3bGluZSkKKGRpc3BsYXkgKGxlYXN0IG1zKSkgKG5ld2xpbmUpCihzZXQhIG1zIChwb3AgbXMpKQooZGlzcGxheSAodG9wIG1zKSkgKG5ld2xpbmUpCihkaXNwbGF5IChsZWFzdCBtcykpIChuZXdsaW5lKQooc2V0ISBtcyAocG9wIG1zKSkKKGRpc3BsYXkgKGVtcHR5PyBtcykpIChuZXdsaW5lKQooZGlzcGxheSAodG9wIG1zKSkgKG5ld2xpbmUpCihkaXNwbGF5IChsZWFzdCBtcykpIChuZXdsaW5lKQooc2V0ISBtcyAocG9wIG1zKSkKKGRpc3BsYXkgKGVtcHR5PyBtcykpIChuZXdsaW5lKQ==