public ArrayList<String> generateParenthesis(int n) {
        ArrayList<String> s  = new ArrayList<String>();
        if(n == 0)
            return s;
        else if(n == 1){
            s.add("()");
            return s;
        }

        ArrayList<String> result = generateParenthesis(n-1);
        for(int i=0;i< result.size();i++){
            String str = result.get(i);
            s.add("()"+ str);
            int count1 = 0;
            int count2 = 0 ;
            for(int j=0;j< str.length();j++){
                String t = str.substring(j,j+1);

                if(t.equals("("))
                    count1++;
                else
                    count2++;
                if(count1== count2){
                    s.add("("+ str.substring(0,j+1)+")"+str.substring(j+1,str.length()));
                }
            }
        }
        return s;
    }