Cod sursa(job #113228)
#include <fstream>
#include <string.h>
using namespace std;
long a[37],nr;
char sir[1000003];
void citire()
{
ifstream fin("ordine.in");
char c;
fin.get(c);
while (c!='\n')
{
a[c-'a']++;
fin.get(c);
nr++;
}
fin.close();
}
int caut(int x)
{
for (int i=0;i<27;i++)
if (a[i]==(nr-x+1)/2+1)
return i;
return -1;
}
void formare()
{
sir[0]='a'+28;
for (long i=1;i<=nr;i++)
{
long x=caut(i);
if (x!=-1) {
sir[i]=x+'a';
a[x]--;}
else
for (int j=0;j<27;j++)
if (a[j]!=0)
if (j!=sir[i-1]-'a'){
sir[i]=j+'a';
a[j]--;
break;
}
}
}
int main()
{
citire();
formare();
ofstream fout("ordine.out");
for (long i=1;i<=nr;i++)
fout<<sir[i];
fout<<"\n";
fout.close();
return 0;
}