class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
helper(n, n, "", res);
return res;
}
void helper(int l, int r, string out, vector<string>& res){
if(l==0 && r==0) res.push_back(out);
else{
if(l>0) helper(l-1, r, out+'(', res);
if(r>l) helper(l, r-1, out+')', res);
}
}
};