#include <bits/stdc++.h>
using namespace std;
#define int              long long int
#define double           long double
#define print(a)         for(auto x : a) cout << x << " "; cout << endl


const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;

inline int power(int a, int b, int mod=M) {
    int x = 1;
    a %= mod;
    while (b) {
        if (b & 1) x = (x * a) % mod; 
        a = (a * a) % mod;
        b >>= 1;
    }
    return x;
}


//_ ***************************** START Below *******************************





vector<long long> fact;
vector<long long> ifact;

void compute(){
    fact.resize(N+1);
    ifact.resize(N+1);
    ifact[0] = fact[0] = fact[1] = 1;
    for(int i=2; i<=N; i++){
        fact[i] = (i * fact[i-1])%M;
    }
    ifact[N] = power(fact[N], M-2, M);
    for(int i=N-1; i>=1; i--){
        ifact[i] = ((i+1) * ifact[i+1])%M;
    }
}

long long fac(int i){
    return fact[i];
}
long long ifac(int i){
    return ifact[i];
}





int consistency(string s) {
    compute();
    
    long long ans = 1;
    stringstream str(s);
    string temp;
    
    while(str >> temp){
        
        int sz = temp.size();        
        vector<int> f(26);
        
        for(auto& ch : temp){
            f[ch-'a']++;
        }
        
        long long val = fac(sz);
        for(auto& ct : f){
            if(ct == 0) continue;
            val = (val * ifac(ct))%M;
        }
        ans = (ans * val)%M;
    }
    return ans%M;
}















int practice(string s){


    return 0;
}





void solve() {
    
    string s;
    getline(cin, s);
    
    
    cout << consistency(s) << endl;


}





int32_t main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int t = 1;
    // cin >> t;
    while (t--) {
        solve();
    }

    return 0;
}