Encontrar todas las combinaciones de paréntesis bien formados

sto surgió mientras hablaba con un amigo y pensé en preguntar aquí, ya que es un problema interesante y me gustaría ver las soluciones de otras persona

La tarea es escribir una función Brackets (int n) que imprima todas las combinaciones de bien formado paréntesis de 1 ... n. Para los corchetes (3) la salida sería

()
(())  ()()   
((()))  (()())  (())()  ()(())  ()()()