// Latihan bergaya OSN, Bab 17, soal 1 -- pembahasan. // // Permutasi dengan unsur berulang: N! dibagi hasil kali faktorial // banyaknya setiap huruf. Pembagian modulo dikerjakan dengan invers. #include #include #include using namespace std; const long long MOD = 1000000007LL; long long pangkat(long long alas, long long eksponen) { long long hasil = 1; alas %= MOD; while (eksponen > 0) { if (eksponen % 2 == 1) hasil = hasil * alas % MOD; alas = alas * alas % MOD; eksponen /= 2; } return hasil; } long long invers(long long a) { return pangkat(a, MOD - 2); // berlaku karena MOD prima } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); string s; cin >> s; int n = s.size(); vector fakt(n + 1); fakt[0] = 1; for (int i = 1; i <= n; i++) fakt[i] = fakt[i - 1] * i % MOD; long long cacah[26] = {0}; for (char c : s) cacah[c - 'a']++; long long hasil = fakt[n]; for (int h = 0; h < 26; h++) { if (cacah[h] > 1) hasil = hasil * invers(fakt[cacah[h]]) % MOD; } cout << hasil << "\n"; return 0; }