void recursion(char * s,int slen,char** arr,int* returnSize,char* temp,int tlen,int cnt,int start,int len){
if(cnt==4){
if(tlen==len+4){
arr[(*returnSize)]=(char*)calloc(tlen,sizeof(char));
memcpy(arr[(*returnSize)],temp,tlen-1);
(*returnSize)++;
}
return;
}
for(int i=start; i<=3 && slen+i<=len; i++){
if(i>=2 && s[0]=='0')
break;
if(i==3 && (s[i-3]-'0')*100+(s[i-2]-'0')*10+(s[i-1]-'0') >255)
break;
memcpy(temp+tlen,s,i);
strcat(temp,".");
recursion(s+i,slen+i,arr,returnSize,temp,tlen+i+1,cnt+1,start,len);
memset(temp+tlen,0,i+1);
}
}
char ** restoreIpAddresses(char * s, int* returnSize){
int len=strlen(s);
char** arr=(char**)calloc(1000,sizeof(char*));
char temp[1000]={0};
*returnSize=0;
if(len>12 || len<4) return NULL;
int start=(len<11)?1 :(len<12)?2 :3;
recursion(s,0,arr,returnSize,temp,0,0,start,len);
return arr;
}