#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void letter_combinations(char*digits,char*combination,int index,char **result,int*returnSize,char **phone_mapping)
{
    if(index == strlen(digits))
    {
        result[*returnSize]=strdup(combination);
        (*returnSize)++;
        return;
    }
    char *letters=phone_mapping[digits[index]-'0'];
    for(int i = 0;letters[i];i++)
    {
        combination[index]=letters[i];
        letter_combinations(digits,combination,index + 1,result,returnSize,phone_mapping);
    }
}
char **lettercombinations(char *digits,int *returnSize)
{
    char *phone_mapping[10]={"","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"};
    *returnSize=0;
    if(!digits||!*digits)return NULL;
    int length=strlen(digits);
    char **result=(char**)malloc(sizeof(char *)* 1000);
    char *combination=(char *)malloc(sizeof(char)*(length + 1));
    combination[length]='\0';
    letter_combinations(digits,combination,0,result,returnSize,phone_mapping);
    free(combination);
    return result;
}
int main()
{
    char digits[]="2";
    int returnSize;
    char **result=lettercombinations(digits,&returnSize);
    if(result==NULL)
    {
        printf("no combinations found\n");
        return 0;
    }
    for(int i=0;i<returnSize;i++)
    {
        printf("%s",result[i]);
        free(result[i]);
    }
    printf("\n");
    free(result);
    return 0;
}