Pagini recente » Cod sursa (job #312569) | Cod sursa (job #7841) | Cod sursa (job #2584773) | Cod sursa (job #763977) | Cod sursa (job #102936)
Cod sursa(job #102936)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN (1 << 20)
int N, cnt[32];
char sir[MAXN];
char sol[MAXN], sol2[MAXN];
int main(void)
{
freopen("ordine.in", "rt", stdin);
freopen("ordine.out", "wt", stdout);
int i, j, k, ind;
//fgets(sir+1, MAXN, stdin);
scanf("%s\n", sir+1); N = strlen(sir+1);
if(sir[N] == '\n') N--;
for(i = 1; i <= N; i++) cnt[sir[i]-'a']++;
for(i = 1; i <= N; i++)
{
for(j = 0; j < 26; j++) if(cnt[j] && sol[i-1] != 'a'+j) break;
if(j == 26)
{
for(k = 0; k < 26; k++) if(cnt[k]) break ;
for(ind = N, j = i-1; j >= 0; j--)
if(cnt[k])
{
if(sol[j] != 'a'+k && sol[j+1] != 'a'+k)
cnt[k]--, sol2[ind--] = 'a'+k, sol2[ind--] = sol[j];
else
sol2[ind--] = sol[j];
}
else
sol2[ind--] = sol[j];
printf("%s\n", sol2+1), exit(0);
}
sol[i] = 'a'+j, cnt[j]--;
}
//puts(sol+1);
printf("%s\n", sol+1);
return 0;
}