I need help with list combining. Example, I have two lists:

("1" "2" "3")

(("1" "a") ("2" "b") ("2" "c") ("2" "d") ("3" "e"))

And I'd like to get: (("1" ("1" "a")) ("2" ("2" "b") ("2" "c") ("2" "d")) ("3" ("3" "e"))

So all with the same number would be nested like that, (number (number letter1) (number letter2)...

So far I have this, but I can't figure out how to group all with the same number in just one list: ("2" ("2" "b") ("2" "c") ("2" "d")) instead of ("2" ("2" "b")) ("2" ("2" "c")) ("2" ("2" "d")) that I'm getting with my code

`(defun c:test ( / n m len1 len2 list3 list4)`

(setq list1 (list "1" "2" "3"))

(setq list2 (list '("1" "a") '("2" "b") '("2" "c") '("2" "d") '("3" "e") ))

(setq n 0)

(setq len1 (length list1))

(setq len2 (length list2))

(while (< n len1)

(setq m 0)

(while (< m len2)

(if (= (nth n list1) (nth 0 (nth m list2)) )

(progn

(setq list3 (list (nth n list1) (nth m list2)))

(setq list4 (cons list3 list4))

);progn

);if

(setq m (+ m 1))

);while

(setq n (+ n 1))

);while

(reverse list4)

);defun