#include char inp[100], ord[100], bra[100], f[256]; int max; int isped(char t) { return (t=='A') || (t=='D') || (t=='G'); } void valj(int, char); void vped(int nr) { valj(nr, 'A'); valj(nr, 'D'); valj(nr, 'G'); } void vfol(int nr, int notB) { if (!notB) valj(nr, 'B'); valj(nr, 'C'); valj(nr, 'E'); valj(nr, 'F'); } void valla(int nr) { vfol(nr, 0); vped(nr); } void valj(int nr, char tkn) { int p,q; if(f[tkn] > 0) { f[tkn]--; ord[nr] = tkn; if((tkn == 'A' || tkn == 'G') && nr > max) { max = nr; for(p=0;p<=nr;p++) bra[p] = ord[p]; } if(isped(tkn)) vfol(nr+1, 0); else if(tkn == 'B') vfol(nr+1, 1); else if(tkn == 'C') { valj(nr+1, 'F'); valj(nr+1, 'G'); } else if(tkn == 'E') vped(nr+1); else valla(nr+1); f[tkn]++; } } int main() { int a; printf("Givna bokst„ver: "); scanf("%s", inp); for(a='A';a<='G';a++) f[a] = 0; for(a=0;inp[a];a++) f[inp[a]]++; max = -1; valla(0); printf("L„ngsta ord: "); for(a=0;a<=max;a++) printf("%c", bra[a]); printf("\n"); }