#include "bits/stdc++.h" // マクロ群 #define REP(i,n) for(int i=0;i> S; // 全体と個別の文字をカウント for (auto itr = S.begin(); itr != S.end(); ++itr) { ++memo[*itr]; ++len; } // パスカルの三角形 for (int i = 1; i <= len; ++i) { tri[i][0] = 1; // 三角形の外側の辺は必ず1 REP2(j, 1, i) { tri[i][j] = (tri[i - 1][j - 1] + tri[i - 1][j]) % MOD; } tri[i][i] = 1; // 三角形の外側の辺は必ず1 } for (int c = 'A'; len > 0; ++c) { if (!memo[c]) continue; ans = ans * tri[len][memo[c]] % MOD; len -= memo[c]; } // ゼロ除算の回避。MODを足した結果に対して-1を行うことで、最小値が1に留まる PFL_N( (ans + MOD - 1) % MOD ); } int main() { Solve(); return 0; }