func_code_string: #include <bits/stdc++.h>   using namespace std;   int num[27];   int num2[27];   inline int idx(char a) { return a -  a ; }   char sa[5555], sb[5555], sans1[5555], sans2[5555], sans[5555];   inline char rev(int id) { return  a  + id; }   int lena, lenb;   bool ans1, ans2;   int main() {     scanf( %s , sa);     scanf( %s , sb);     ans1 = false;     ans2 = false;     memset(num, 0, sizeof(num));     memset(num2, 0, sizeof(num2));     lena = strlen(sa);     lenb = strlen(sb);     for (int i = 0; i < lena; i++) {       num[idx(sa[i])]++;       num2[idx(sa[i])]++;     }     if (lena > lenb) {       int flag = 1;       for (int i = 0; i < lenb; i++) {         sans1[i] = sb[i];         if (!num[idx(sb[i])]) {           flag = 0;           break;         } else {           num[idx(sb[i])]--;         }       }       if (flag) {         ans1 = true;         int tl = lenb;         for (int i = 0; i < 26; i++) {           while (num[i]) {             num[i]--;             sans1[tl++] = rev(i);           }         }         sans1[tl] =   0 ;       }     }     for (int i = 0; i < 26; i++) num[i] = num2[i];     int lastmch = -1;     for (int i = 0; i < lenb; i++) {       if (num[idx(sb[i])]) {         num[idx(sb[i])]--;         sans2[i] = sb[i];         lastmch = i;       } else {         int tl = i;         int fg = 0;         for (int j = idx(sb[i]) + 1; j < 26; j++) {           if (num[j]) {             fg = 1;             num[j]--;             sans2[tl++] = rev(j);             break;           }         }         if (!fg) {           for (int k = i - 1; k >= 0; k--) {             tl = k;             if (tl >= 0) {               num[idx(sb[k])]++;               for (int j = idx(sb[k]) + 1; j < 26; j++) {                 if (num[j]) {                   lastmch = k - 1;                   fg = 1;                   num[j]--;                   sans2[tl++] = rev(j);                   break;                 }               }             }             if (fg) break;           }         }         if (fg) {           ans2 = true;           for (int j = 0; j < 26; j++) {             while (num[j]) {               num[j]--;               sans2[tl++] = rev(j);             }           }         }         sans2[tl] =   0 ;         break;       }     }     if (lastmch == lenb - 1 && ans2 == 0) {       int i = lenb;       int fg = 0;       int tl;       for (int k = i - 1; k >= 0; k--) {         tl = k;         if (tl >= 0) {           num[idx(sb[k])]++;           for (int j = idx(sb[k]) + 1; j < 26; j++) {             if (num[j]) {               lastmch = k - 1;               fg = 1;               num[j]--;               sans2[tl++] = rev(j);               break;             }           }         }         if (fg) break;       }       if (fg) {         ans2 = true;         for (int j = 0; j < 26; j++) {           while (num[j]) {             num[j]--;             sans2[tl++] = rev(j);           }         }       }       sans2[tl] =   0 ;     }     int fg = 0;     if (ans1 == false && ans2 == false) {       cout << -1 << endl;       return 0;     }     if (ans1) {       fg = 1;       strcpy(sans, sans1);     }     if (fg && ans2) {       if (strcmp(sans1, sans2) > 0) {         strcpy(sans, sans2);       } else {         strcpy(sans, sans1);       }     } else if (ans2) {       strcpy(sans, sans2);     }     puts(sans);     return 0;   }   