#Haskell, <s>140</s> 132 bytes Thanks @nimi for saving a few bytes! <!-- language-all: lang-haskell --> import Data.List h s|m<-length s=nub[k|l<-s!!0,k<-('(':l++")"):[u++v|n<-[0..m-2],u<-s!!n,v<-s!!(m-2-n)]]:s f n=iterate h[[""]]!!n!!0 First of all: `iterate` does create a recursion sequecnce of `h`, but this is a builtin, and by the rules we may use builtins that use recursion. This is just a very simple recursive approach, we can generate the n-Dyck-words by putting (n-1)-Dyck-words between paranthesis, or by concatenating from shorter Dyck words. This approach however does generate duplicates, that is why we filter for unique elements using `nub`. As Haskell is a functional language, it is almost impossible to do this without recursion. There is an even more direct approach, but that one is banned under the current rules.