int** permute(int* nums, int numsSize, int* returnSize) {
int size=1,i=numsSize,count=1,cc=0;
for(;i>1;i--)size*=i;
*returnSize=size;
int **a=(int **)calloc(size,sizeof(int *)),**b=(int **)calloc(size,sizeof(int *)),**c=a,**d=b;
bool flag=true;
for(i=0;i<size;i++)
{
a[i]=(int *)calloc((numsSize),sizeof(int));
b[i]=(int *)calloc((numsSize),sizeof(int));
}
for(int temp=0;temp<numsSize;temp++){
flag?(c=a,d=b,flag=false):(c=b,d=a,flag=true);
for (int k=0;k<count;k++)
{
for (int l=0;l<numsSize;l++)
{
int j=0;
for (;j<temp;j++)
{
if (c[k][j]==nums[l])break;
}
if (j>=temp)
{
memcpy(d[cc],c[k],sizeof(int)*temp);
d[cc++][temp]=nums[l];
}
}
}
count=cc;cc=0;
}
return d;
}