void recursion(int n, int k, int* returnSize, int* col,int* temp,int cnt,int** arr,int start){
if(cnt==k){
arr[(*returnSize)]=(int*)calloc(k,sizeof(int));
memcpy(arr[(*returnSize)],temp,k*sizeof(int));
col[(*returnSize)++]=k;
return;
}
for(int i=start; i<=n-k+1+cnt; i++){
temp[cnt]=i;
recursion(n, k, returnSize, col, temp, cnt+1, arr,i+1);
}
}
int** combine(int n, int k, int* returnSize, int** returnColumnSizes){
double x1=n, x2=n-k, val1=1, val2=1, val=1;
while(x1>k)
val1*=x1--;
while(x2>1)
val2*=x2--;
int** arr=(int**)calloc(val1/val2,sizeof(int*));
*returnSize=0;
*returnColumnSizes=(int*)calloc(val1/val2,sizeof(int*));
int temp[100]={0};
recursion(n,k,returnSize,*returnColumnSizes,temp,0,arr,1);
return arr;
}