#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T bigmod(T p, T e, T M) {
  long long ret = 1;
  for (; e > 0; e >>= 1) {
    if (e & 1) ret = (ret * p) % M;
    p = (p * p) % M;
  }
  return (T)ret;
}
template <class T>
inline T modinverse(T a, T M) {
  return bigmod(a, M - 2, M);
}
char arr[1000007];
long long cnt[30], mod = 1e9 + 7;
long long fact[1000007], inv[1000007];
long long calc(string s) {
  int sz = s.size();
  long long ans = 0;
  for (int i = 0; i < sz; i++) {
    long long now = s[i] - 'a';
    long long temp = fact[sz - i - 1];
    for (int j = 0; j < 26; j++) {
      if (cnt[j]) {
        temp *= inv[cnt[j]];
        temp %= mod;
      }
    }
    long long res = 0;
    for (int j = 0; j < now; j++) {
      if (cnt[j]) {
        temp *= fact[cnt[j]];
        temp %= mod;
        temp *= inv[cnt[j] - 1];
        temp %= mod;
        res += temp;
        if (res >= mod) res %= mod;
        temp *= fact[cnt[j] - 1];
        temp %= mod;
        temp *= inv[cnt[j]];
        temp %= mod;
      }
    }
    ans += res;
    if (ans >= mod) ans %= mod;
    if (cnt[s[i] - 'a'])
      cnt[s[i] - 'a']--;
    else
      break;
  }
  return ans;
}
int main() {
  string s, t;
  long long i, j, k, l, x, y;
  fact[0] = 1;
  inv[0] = 1;
  for (i = 1; i < 1000007; i++) {
    fact[i] = fact[i - 1] * i;
    fact[i] %= mod;
    inv[i] = modinverse(fact[i], mod);
  }
  scanf("%s", arr);
  s = arr;
  scanf("%s", arr);
  t = arr;
  if (s >= t) {
    cout << 0 << endl;
    return 0;
  }
  for (i = 0; i < s.size(); i++) {
    cnt[s[i] - 'a']++;
  }
  long long ans = calc(t);
  memset(cnt, 0, sizeof(cnt));
  for (i = 0; i < s.size(); i++) {
    cnt[s[i] - 'a']++;
  }
  long long ans2 = calc(s);
  long long fin = ans - ans2 - 1LL;
  fin %= mod;
  if (fin < 0) fin += mod;
  cout << fin << endl;
  return 0;
}
