#include using namespace std; #define ALL(x) begin(x),end(x) #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b ostream &operator<<(ostream &os,const vector&v){ for(int i=0;i<(int)v.size();i++) os< istream &operator>>(istream &is,vector&v){ for(T &x:v)is>>x; return is; } // Precomputation : O(M log (log M)) (M : MAX) // Factorize Query : O(log N) (N<=MAX) template struct FactorizeQueries{ vector min_factor; FactorizeQueries(){ min_factor.resize(MAX+1); iota(begin(min_factor),end(min_factor),0); for(int i=2;i*i<=MAX;i++){ if(min_factor[i]==i) for(int j=i+i;j<=MAX;j+=i) min_factor[j]=min(min_factor[j],i); } } vector Factorize(int x){ assert(x<=MAX); vector ret; for(;x>1;x/=min_factor[x]) ret.push_back(min_factor[x]); return ret; } }; const int P = 573; signed main(){ FactorizeQueries<1010> F; string S; cin >> S; int N = (int) S.size(); vector C(26, 0); for(auto &x : S) C[x - 'A']++; map num; for(int i = 1; i <= N; i++){ for(auto &x : F.Factorize(i)) num[x]++; } for(auto &den : C){ for(int i = 1; i <= den; i++) for(auto &x : F.Factorize(i)) num[x]--; } int ans = 1; for(auto [mul, time] : num){ rep(_, time) ans = (ans * mul) % P; } ans = (ans + 572) % P; cout << ans << endl; return 0; }