Cod sursa(job #160100)
#include <stdio.h>
#include <string.h>
struct ab{
int a,b;
};
int main(){
int w[30]={0},i=0,j,t,poz,k=0,x;
char c[1000000];
ab v[30];
freopen("ordine.in","r",stdin);
freopen("ordine.out","w",stdout);
scanf("%s",c);
x=strlen(c);
for(i=0;i<x;i++)
w[(int)(c[i]-97)]++;
for(i=0;i<=25;i++)
if(w[i]) {
v[++k].a=w[i];
v[k].b=i+97;
}
i=1;
j=2;
while(v[k].a){
if(i<=k && j<=k) {
while(v[i].a && v[j].a){
printf("%c%c",v[i].b,v[j].b); v[i].a--; v[j].a--;}
}
else if(i<=k) { printf("%c",v[i].b); v[i].a--; }
else if(j<=k) { printf("%c",v[j].b); v[j].a--; }
if(v[i].a==0 && v[j].a==0) { i+=2; j+=2; }
else if(v[i].a==0) i+=2;
else if(v[j].a==0) j++;
}
return 0;
}