;; (import (chicken string))
( define ( product . lists)
( define ( prod xs ys)
( foldl ( lambda ( acc x) ( foldl ( lambda ( acc y) ( cons ( cons x y) acc) ) acc ys) ) '( ) xs) )
( define ( f acc lists)
( if ( null? lists)
acc
( g ( prod ( car lists) acc) ( cdr lists) ) ) )
( define ( g acc lists)
( if ( null? lists)
( reverse acc)
( f ( prod ( reverse ( car lists) ) acc) ( cdr lists) ) ) )
( f '( ( ) ) ( reverse lists) ) )
( define ( repeat x n)
( define ( aux acc n)
( if ( <= n 0 )
acc
( aux ( cons x acc) ( - n 1 ) ) ) )
( aux '( ) n) )
( define ( f s n)
( apply product ( repeat ( string- chop s 1 ) n) ) )
( print ( f "ABC" 0 ) )
( print ( f "ABC" 1 ) )
( print ( f "ABC" 2 ) )
( print ( f "ABC" 3 ) )
OzsgKGltcG9ydCAoY2hpY2tlbiBzdHJpbmcpKQooZGVmaW5lIChwcm9kdWN0IC4gbGlzdHMpCiAgKGRlZmluZSAocHJvZCB4cyB5cykKICAgIChmb2xkbCAobGFtYmRhIChhY2MgeCkgKGZvbGRsIChsYW1iZGEgKGFjYyB5KSAoY29ucyAoY29ucyB4IHkpIGFjYykpIGFjYyB5cykpICcoKSB4cykpCiAgKGRlZmluZSAoZiBhY2MgbGlzdHMpCiAgICAoaWYgKG51bGw/IGxpc3RzKQogICAgICAgIGFjYwogICAgICAgIChnIChwcm9kIChjYXIgbGlzdHMpIGFjYykgKGNkciBsaXN0cykpKSkKICAoZGVmaW5lIChnIGFjYyBsaXN0cykKICAgIChpZiAobnVsbD8gbGlzdHMpCiAgICAgICAgKHJldmVyc2UgYWNjKQogICAgICAgIChmIChwcm9kIChyZXZlcnNlIChjYXIgbGlzdHMpKSBhY2MpIChjZHIgbGlzdHMpKSkpCiAgKGYgJygoKSkgKHJldmVyc2UgbGlzdHMpKSkKKGRlZmluZSAocmVwZWF0IHggbikKICAoZGVmaW5lIChhdXggYWNjIG4pCiAgICAoaWYgKDw9IG4gMCkKICAgICAgICBhY2MKICAgICAgICAoYXV4IChjb25zIHggYWNjKSAoLSBuIDEpKSkpCiAgKGF1eCAnKCkgbikpCihkZWZpbmUgKGYgcyBuKQogIChhcHBseSBwcm9kdWN0IChyZXBlYXQgKHN0cmluZy1jaG9wIHMgMSkgbikpKQoocHJpbnQgKGYgIkFCQyIgMCkpCihwcmludCAoZiAiQUJDIiAxKSkKKHByaW50IChmICJBQkMiIDIpKQoocHJpbnQgKGYgIkFCQyIgMykpCg==