void sort(char a[],int N)
{
char aux[N];
mSort(a, aux, 0, N-1);
}
void mSort(char a[], char aux[], int lo, int hi)
{
if(hi<=lo) return;
int mid=lo+(hi-lo)/2;
msort(a, aux, lo, mid);
msort(a, aux, mid+1, hi);
merge(a, aux, lo, mid, hi);
}
void merge(char a[], char aux[], int lo, int mid, int hi)
{
// copy the original array to aux array
for(int k=lo; k<hi; k++)
aux[k]=a[k];
//merge
int i=lo, j=mid+1;
for(int k=lo; k<=hi; k++)
{
if(i>mid)
else if(j>hi)
a[k]=aux[j++];
a[k]=aux[i++];
else if(aux[j]<aux[i]) a[k]=aux[j++];
else
a[k]=aux[i++];
}
}