#include <iostream>
#include <cmath>
#include <vector>
#include <string>
#include <bits/stdc++.h>
#include <cstdlib>
#include <time.h>
#include <fstream>
#include <iterator>
#include <utility>
#include <algorithm>
using namespace std;
typedef vector<int> vi;
#define ll long long
#define all(v) ((v).begin()), ((v).end())
#define sz(v) ((int)((v).size()))
#define vinp(v, n) \
for (int i = 0; i < (n); i++) \
cin >> (v)[i]
#define printv(v) \
for (auto i : (v)) \
cout << i << " "
#define fast() \
ios::sync_with_stdio(0); \
cin.tie(0); \
cout.tie(0);
#define loop(n) for (int i = 0; i < (n); i++)
#define _CRT_SECURE_NO_WARNING
const int MOD = 1e9 + 7;
// Function to calculate factorial modulo MOD
long long factorial(ll n) {
long long result = 1;
for (ll i = 1; i <= n; ++i) {
result = (result * i) % MOD;
}
return result;
}
int main()
{
string s;
cin >> s;
ll n = s.length();
ll freq[123]={};
ll c=-1;
for(ll i=0;i<n;i++){
freq[s[i]]++;
if(freq[s[i]]==1){
c++;
}
}
long long ans = factorial(n);
long long b = factorial(n-c);
ll sum = (ans%MOD)/(b%MOD);
cout << sum << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPGZzdHJlYW0+CiNpbmNsdWRlIDxpdGVyYXRvcj4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBhbGwodikgKCh2KS5iZWdpbigpKSwgKCh2KS5lbmQoKSkKI2RlZmluZSBzeih2KSAoKGludCkoKHYpLnNpemUoKSkpCiAKI2RlZmluZSB2aW5wKHYsIG4pICAgICAgICAgICAgICAgIFwKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKG4pOyBpKyspIFwKICAgIGNpbiA+PiAodilbaV0KI2RlZmluZSBwcmludHYodikgICAgICBcCiAgICBmb3IgKGF1dG8gaSA6ICh2KSkgXAogICAgY291dCA8PCBpIDw8ICIgIgojZGVmaW5lIGZhc3QoKSAgICAgICAgICAgICAgIFwKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOyBcCiAgICBjaW4udGllKDApOyAgICAgICAgICAgICAgXAogICAgY291dC50aWUoMCk7CiNkZWZpbmUgbG9vcChuKSBmb3IgKGludCBpID0gMDsgaSA8IChuKTsgaSsrKQojZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkcKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CiAKLy8gRnVuY3Rpb24gdG8gY2FsY3VsYXRlIGZhY3RvcmlhbCBtb2R1bG8gTU9ECmxvbmcgbG9uZyBmYWN0b3JpYWwobGwgbikgewogICAgbG9uZyBsb25nIHJlc3VsdCA9IDE7CiAgICBmb3IgKGxsIGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgIHJlc3VsdCA9IChyZXN1bHQgKiBpKSAlIE1PRDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KaW50IG1haW4oKQp7CiAgICBzdHJpbmcgczsKICAgIGNpbiA+PiBzOwogICAgbGwgbiA9IHMubGVuZ3RoKCk7CiAgICBsbCBmcmVxWzEyM109e307CiAgICBsbCBjPS0xOwogICAgZm9yKGxsIGk9MDtpPG47aSsrKXsKICAgICAgICBmcmVxW3NbaV1dKys7CiAgICAgICAgaWYoZnJlcVtzW2ldXT09MSl7CiAgICAgICAgICAgIGMrKzsKICAgICAgICB9CiAgICB9CiAgICBsb25nIGxvbmcgYW5zID0gZmFjdG9yaWFsKG4pOwogICAgbG9uZyBsb25nIGIgPSBmYWN0b3JpYWwobi1jKTsKICAgIGxsIHN1bSA9IChhbnMlTU9EKS8oYiVNT0QpOwogICAgY291dCA8PCBzdW0gPDwgZW5kbDsKIAogICAgcmV0dXJuIDA7Cn0=