#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000000 + 10;
const long long MOD = 1000000007;
long long mul(long long a, long long b) { return a * b % MOD; }
void add(long long& a, long long b) {
  a += b;
  if (a >= MOD) a -= MOD;
}
long long sub(long long a, long long b) {
  a -= b;
  if (a < 0) a += MOD;
  return a;
}
char s1[maxn], s2[maxn];
int n, cnt[26];
long long inv[maxn];
long long fac[maxn], ifac[maxn];
void preprocess() {
  inv[1] = fac[0] = ifac[0] = 1;
  for (int i = 1; i < maxn; i++) fac[i] = mul(i, fac[i - 1]);
  for (int i = 2; i < maxn; i++) inv[i] = mul(MOD - MOD / i, inv[MOD % i]);
  for (int i = 1; i < maxn; i++) ifac[i] = mul(inv[i], ifac[i - 1]);
}
long long C(int n, int k) { return mul(mul(fac[n], ifac[k]), ifac[n - k]); }
long long calc(char* s) {
  int t[26];
  memcpy(t, cnt, sizeof(cnt));
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    int c = s[i] - 'a';
    long long prod = fac[n - i - 1];
    for (int j = 0; j < 26; j++)
      if (t[j]) prod = mul(prod, ifac[t[j]]);
    for (int j = 0; j < c; j++)
      if (t[j]) {
        add(ans, mul(prod, t[j]));
      }
    if (t[c])
      t[c]--;
    else
      return ans;
  }
  return ans;
}
int main() {
  preprocess();
  scanf("%s%s", s1, s2);
  n = strlen(s1);
  for (int i = 0; i < n; i++) cnt[s1[i] - 'a']++;
  long long ans = sub(calc(s2), calc(s1));
  add(ans, MOD - 1);
  printf("%lld\n", ans);
  return 0;
}
