<p>Given <code>n</code> pairs of parentheses, write a function to <em>generate all combinations of well-formed parentheses</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<pre><strong>Input:</strong> n = 3
<strong>Output:</strong> ["((()))","(()())","(())()","()(())","()()()"]
</pre><p><strong class="example">Example 2:</strong></p>
<pre><strong>Input:</strong> n = 1
<strong>Output:</strong> ["()"]
</pre>
<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= n &lt;= 8</code></li>
</ul>

class Solution {
public:
    void recfun(set<string>& ss, string s, int open, int closed)
    {
        if(closed == 0)
        {
            ss.insert(s);
        }
        else if(open > 0)
        {
            recfun(ss, s + "(", open-1, closed);
            recfun(ss, s + "()", open-1, closed-1);
            if(closed > open)
                recfun(ss, s + ")", open, closed-1);
        }
        else{
            recfun(ss, s + ")", open, closed-1);
        }

    }

    vector<string> generateParenthesis(int n) {
        set<string> ss;
        string s = "";
        recfun(ss, s, n, n);

        vector<string> vecs;
        for(auto t: ss)
        {
            vecs.push_back(t);
        }

        return vecs;
    }
};
32144