import java.util.*;


public class Solution {
    /**
     * 
     * @param n int整型 
     * @return string字符串ArrayList
     */
    public ArrayList<String> generateParenthesis (int n) {
         ArrayList<String> list = new ArrayList<>();


        dfs(list, new StringBuilder(), n, 0, 0);
        return list;
    }

    public void dfs(ArrayList<String> list, StringBuilder builder, int n, int open ,int close) {
        if (close>open || open>n) {
            return;
        }
        if (builder.length()==2*n) {
            list.add(builder.toString());
            return;
        }
        dfs(list, builder.append("("), n, open + 1, close);
        builder.deleteCharAt(builder.length()-1);
        dfs(list, builder.append(")"), n, open, close + 1);
        builder.deleteCharAt(builder.length()-1);
    }
}