class Solution {
public:
void gen(int le, int ri, int n, vector<string> &vs, string &s) {
if (le == ri && ri == n) {
vs.push_back(s);
return ;
}
if (le < n) {
s[le + ri] = '(';
gen(le + 1, ri, n, vs, s);
}
if (le > ri) {
s[le + ri] = ')';
gen(le, ri + 1, n, vs, s);
}
}
vector<string> generateParenthesis(int n) {
vector<string> ret;
string s;
s.resize(n * 2);
gen(0, 0, n, ret, s);
return ret;
}
};