#include <bits/stdc++.h>
using namespace std;
int l1, l2;
int t[5010], cnt[5010];
char s1[5010], s2[5010];
bool check(int x) {
  int i;
  int nx;
  for (i = (0); i <= (25); i++) t[i] = cnt[i];
  for (i = (0); i <= (x); i++) {
    if (t[s2[i] - 'a'])
      t[s2[i] - 'a']--;
    else
      return 0;
  }
  bool f = 0;
  if (x == l2 - 1)
    nx = -1;
  else
    nx = s2[x + 1] - 'a';
  for (i = (0); i <= (25); i++)
    if (t[i] && i > nx) {
      f = 1;
      break;
    }
  return f;
}
void output() {
  int i, j;
  for (i = (0); i <= (25); i++)
    for (j = (1); j <= (t[i]); j++) printf("%c", i + 'a');
  printf("\n");
}
int main() {
  ios::sync_with_stdio(false);
  scanf("%s", &s1);
  scanf("%s", &s2);
  int i;
  l1 = strlen(s1);
  l2 = strlen(s2);
  for (i = (0); i <= (l1 - 1); i++) cnt[s1[i] - 'a']++;
  int p = -2;
  for (i = (l2 - 1); i >= (-1); i--) {
    if (check(i)) {
      p = i;
      break;
    }
  }
  if (p == -2)
    printf("-1\n");
  else {
    for (i = (0); i <= (25); i++) t[i] = cnt[i];
    for (i = (0); i <= (p); i++) {
      if (t[s2[i] - 'a'])
        t[s2[i] - 'a']--;
      else
        return 0;
    }
    if (p == l2 - 1) {
      for (i = (0); i <= (p); i++) printf("%c", s2[i]);
      output();
    } else {
      for (i = (0); i <= (p); i++) printf("%c", s2[i]);
      int nx = s2[p + 1] - 'a', p0;
      for (i = (0); i <= (25); i++)
        if (t[i] && i > nx) {
          p0 = i;
          t[i]--;
          break;
        }
      printf("%c", p0 + 'a');
      output();
    }
  }
  return 0;
}
