class Solution { public: void dfs(vector<string>&ans,string&temp,int n,int l,int r) { if(l+r==n) { if(l==r)ans.push_back(temp); return; } if(l==r) { temp.push_back('('); dfs(ans,temp,n,l+1,r); temp.pop_back(); } else { temp.push_back('('); dfs(ans,temp,n,l+1,r); temp.pop_back(); temp.push_back(')'); dfs(ans,temp,n,l,r+1); temp.pop_back(); } } vector<string> generateParenthesis(int n) { vector<string>ans; string temp=""; dfs(ans,temp,2*n,0,0); return ans; } };