Cod sursa(job #163479)
#include <stdio.h>
#include <string.h>
int main(){
int w[30]={0},i=0,j,l,min,last=-1,ok=0;
char c[1000000];
freopen("ordine.in","r",stdin);
freopen("ordine.out","w",stdout);
scanf("%s",c);
l=strlen(c);
for(i=0;i<l;i++)
w[(int)(c[i]-97)]++;
for(i=1;i<=l;i++){
min=0;
ok=0;
for(j=0;j<=25;j++){
if((l-i+1)/2+1==w[j]) min=j;
if(w[j] && j!=last && ok==0) { last=j; ok=1; }
}
if(min==0){
printf("%c",last+97);
w[last]--;
}
else {
printf("%c",min+97);
w[min]--;
last=min;
}
}
return 0;
}