#include <vector>
#include <string>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return string字符串vector
     */
    vector<string> ans;
    // left,right分别表示左右括号的个数
    void dfs(int n, string str, int left, int right)
    {
        if(left==n && right==n)
        {
            ans.emplace_back(str);
            return;
        }

        if(right>left || left>n || right>n)
            return;

        // 前往不能写成dfs(n,str+="(",left+1,right);
        dfs(n,str+"(",left+1,right);
        
        dfs(n,str+")",left,right+1);
    }


    vector<string> generateParenthesis(int n) {
        // write code here
        string str = "";
        dfs(n,str,0,0);
        return ans;
    }
};