(defun ff (lst)
(defun f (n)
(setq i 0 flst nil)
(while (<= i n)
(setq flst (cons i flst))
(setq i (+ i 1))
)
(reverse flst)
)
(if (and (= (length lst) 1) (setq nlst (f (car lst))))
(progn
(setq fflst nil)
(setq fflst (mapcar '(lambda (x) (cons x fflst)) nlst))
)
(progn
(setq fflst (ff (cdr lst)) ttlst nil)
(foreach a nlst
(foreach b fflst
(setq ttlst (cons (cons a b) ttlst))
)
)
(setq fflst (reverse ttlst))
)
)
fflst
)
(ff '(1 2 3))