#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
const long long mod = 1e9 + 7;
long long fac[maxn], facinv[maxn];
long long qpow(long long a, long long b, long long p) {
  long long res = 1;
  while (b) {
    if (b & 1) res = res * a % p;
    b >>= 1;
    a = a * a % p;
  }
  return res;
}
void init() {
  fac[0] = fac[1] = 1;
  facinv[0] = facinv[1] = 1;
  for (int i = 2; i <= 1000000; i++) {
    fac[i] = fac[i - 1] * i % mod;
    facinv[i] = facinv[i - 1] * qpow(i, mod - 2, mod) % mod;
  }
}
string str1, str2;
int num[30];
long long cal(int pos) {
  long long sum = 0;
  for (int i = 0; i < 26; i++) sum += num[i];
  if (sum == 0) return 0;
  long long res = fac[sum - 1];
  sum = 0;
  for (int i = 0; i < 26; i++) res = res * facinv[num[i]] % mod;
  for (int i = 0; i < pos; i++) {
    if (num[i])
      sum = (sum + res * fac[num[i]] % mod * facinv[num[i] - 1] % mod) % mod;
  }
  return sum;
}
int main() {
  cin >> str1 >> str2;
  long long ans = 0;
  init();
  for (int i = 0; i < str1.size(); i++) num[str1[i] - 'a']++;
  for (int i = 0; i < str2.size(); i++) {
    ans = ans + cal(str2[i] - 'a');
    ans %= mod;
    if (num[str2[i] - 'a'])
      num[str2[i] - 'a']--;
    else
      break;
  }
  memset(num, 0, sizeof(num));
  for (int i = 0; i < str1.size(); i++) num[str1[i] - 'a']++;
  for (int i = 0; i < str1.size(); i++) {
    ans = ans - cal(str1[i] - 'a');
    ans %= mod;
    ans = (ans + mod) % mod;
    if (num[str1[i] - 'a'])
      num[str1[i] - 'a']--;
    else
      break;
  }
  if (str1 < str2) {
    ans--;
    ans = (ans % mod + mod) % mod;
  }
  cout << ans << endl;
  return 0;
}
