func_code_string: #include <bits/stdc++.h>   using namespace std;   char s1[5010], s2[5010], str[5010];   int num[30];   int len1, len2;   int dfs(int k, int m) {     if (!s1[k]) return m;     for (int i = 0; i < 26; i++)       if (num[i] && (m || (i >= s2[k] -  a ))) {         str[k] = i +  a ;         num[i]--;         if (dfs(k + 1, m || (i > s2[k] -  a ))) return 1;         num[i]++;       }     return 0;   }   int main() {     while (EOF != scanf( %s %s , s1, s2)) {       memset(num, 0, sizeof(num));       len1 = strlen(s1), len2 = strlen(s2);       for (int i = 0; i < len1; i++) num[s1[i] -  a ]++;       if (!dfs(0, 0))         printf( -1 n );       else {         printf( %s n , str);       }     }     return 0;   }   