int arr[3];
void generate(int n,char str[],int len,int mask)
{
    if(len==n)
    {

        for(int i=0;i<strlen(str);i++)
        { 
                 if(arr[i]!=0)
                printf("%c",str[arr[i]-1]);
        }
        printf("\n");
    }
    for(int i=0;i<strlen(str);i++)
    {
        if(((1<<i)&mask)==0)
        { 
            arr[len]=i+1;
            generate(n,str,len+1,mask|(1<<i));
            arr[len]=0;
        }
    }
}

I have written to function to generate strings as per your problem but it doesn't filter the duplicates.

you have to call it like this:
char str[]="aba";
      for(int i=1;i<=strlen(str);i++)
      {
          generate(i,str,0,0);
      }