<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:
    vector<string> generateParenthesis(int n) {
        vector<string> result;
        std::function<void(int, int, string&)> impl;
        impl = [&result, &impl](int leftClose, int leftOpen, string& combination) {
            if (leftClose == 0 && leftOpen == 0) {
                result.push_back(combination);
            } else if (leftClose == leftOpen) {
                combination += '(';
                impl(leftClose, leftOpen - 1, combination);
                combination.pop_back();
            } else {
                if (leftOpen > 0) {
                    combination += '(';
                    impl(leftClose, leftOpen - 1, combination);
                    combination.pop_back();
                }
                if (leftClose > 0) {
                    combination += ')';
                    impl(leftClose - 1, leftOpen, combination);
                    combination.pop_back();
                }
            }
        };
        std::string combination;
        impl(n, n, combination);
        return result;
    }
};
13311