class Solution {
public:
vector<string> generateParenthesis(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
string s(2*n,'\0');
vector<string> v;
helper(v,s,n,0,0);
return v;
}
void helper(vector<string>& v,string& s,int left,int right,int level){
if(level==s.size()){
v.push_back(s);
return;
}
if(left>0){
s[level]='(';
helper(v,s,left-1,right+1,level+1);
}
if(right>0){
s[level]=')';
helper(v,s,left,right-1,level+1);
}
}
};