;; (import (chicken string))
( define ( product . lists)
( define ( prod xs ys)
( reverse ( foldl ( lambda ( acc x) ( foldl ( lambda ( acc y) ( cons ( list x y) acc) ) acc ys) ) '( ) xs) ) )
( if ( null? lists)
'( )
( map flatten ( foldl prod ( car lists) ( cdr 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 ) )
OzsgKGltcG9ydCAoY2hpY2tlbiBzdHJpbmcpKQooZGVmaW5lIChwcm9kdWN0IC4gbGlzdHMpCiAgKGRlZmluZSAocHJvZCB4cyB5cykKICAgIChyZXZlcnNlIChmb2xkbCAobGFtYmRhIChhY2MgeCkgKGZvbGRsIChsYW1iZGEgKGFjYyB5KSAoY29ucyAobGlzdCB4IHkpIGFjYykpIGFjYyB5cykpICcoKSB4cykpKQogIChpZiAobnVsbD8gbGlzdHMpCiAgICAgICcoKQogICAgICAobWFwIGZsYXR0ZW4gKGZvbGRsIHByb2QgKGNhciBsaXN0cykgKGNkciBsaXN0cykpKSkpCihkZWZpbmUgKHJlcGVhdCB4IG4pCiAgKGRlZmluZSAoYXV4IGFjYyBuKQogICAgKGlmICg8PSBuIDApCiAgICAgICAgYWNjCiAgICAgICAgKGF1eCAoY29ucyB4IGFjYykgKC0gbiAxKSkpKQogIChhdXggJygpIG4pKQooZGVmaW5lIChmIHMgbikKICAoYXBwbHkgcHJvZHVjdCAocmVwZWF0IChzdHJpbmctY2hvcCBzIDEpIG4pKSkKKHByaW50IChmICJBQkMiIDApKQoocHJpbnQgKGYgIkFCQyIgMSkpCihwcmludCAoZiAiQUJDIiAyKSkKKHByaW50IChmICJBQkMiIDMpKQo=