#include <bits/stdc++.h>
using namespace std;
const long long int modulo = 1e9 + 7;
long long int eleva(long long int b, long long int e) {
  if (e == 0) return 1;
  if (e % 2 == 0) return eleva(b * b % modulo, e / 2);
  return b * eleva(b * b % modulo, e / 2) % modulo;
}
long long int inverso(long long int x) { return eleva(x, modulo - 2); }
void anyade(long long int &a, long long int b) { a = (a + b) % modulo; }
const int limite = 1000005;
long long int fact[limite];
long long int factinv[limite];
long long int combi(int n, int k) {
  return fact[n] * factinv[k] % modulo * factinv[n - k] % modulo;
}
long long int combiinv(int n, int k) {
  return factinv[n] * fact[k] % modulo * fact[n - k] % modulo;
}
int n;
long long int calcula(int v[limite], vector<int> cuantos) {
  long long int sol = 0;
  for (int i = 0; i < n; i++) {
    int x = v[i];
    int cuan = n - i;
    long long int comb = 1;
    for (int y = 0; y < 26; y++) {
      comb = comb * combi(cuan, cuantos[y]) % modulo;
      cuan -= cuantos[y];
    }
    cuan = n - i;
    for (int y = 0; y < x; y++)
      if (cuantos[y])
        anyade(sol, comb * combiinv(cuan, cuantos[y]) % modulo *
                        combi(cuan - 1, cuantos[y] - 1));
    if (cuantos[x] == 0) return sol;
    cuantos[x]--;
  }
  return sol;
}
char buff[limite];
void leer(int v[limite], vector<int> &cuantos) {
  scanf("%s", buff);
  for (n = 0; buff[n]; n++) v[n] = buff[n] - 'a';
  for (int i = 0; i < n; i++) cuantos[v[i]]++;
}
int a[limite];
int b[limite];
vector<int> cuantosa;
vector<int> cuantosb;
int main() {
  fact[0] = factinv[0] = 1;
  for (int i = 1; i < limite; i++) {
    fact[i] = fact[i - 1] * i % modulo;
    factinv[i] = inverso(fact[i]);
  }
  cuantosa = cuantosb = vector<int>(26, 0);
  leer(a, cuantosa);
  leer(b, cuantosb);
  printf("%d\n",
         int(((calcula(b, cuantosa) - calcula(a, cuantosa) - 1) + modulo) %
             modulo));
}
