void recursion(char** arr,char* s,int cur,int cnt,int num,int n,int* returnSize){
if (cur == n*2){
arr[(*returnSize)] = (char*)calloc(n*2 + 1, sizeof(char));
strcat(arr[(*returnSize)++], s);
return;
}
for (int i = 0; i < 2; i++){
if(num==0 && i==1 || num==n && i==0 || cnt==n && i==0 || cnt==0 && i==1)
continue;
s[cur] = (i)?')' :'(';
recursion(arr, s, cur+1, (i)?cnt-1 :cnt+1, (i==0)?num+1 :num, n, returnSize);
s[cur] = '\0';
}
}
char ** generateParenthesis(int n, int* returnSize){
*returnSize = 0;
char** arr = (char**)calloc(10000, sizeof(char*));
char* s = (char*)calloc(n*2+1, sizeof(char));
if (n==0) return NULL;
recursion(arr,s, 0, 0, 0, n,returnSize);
return arr;
}