#include #include using namespace std; using namespace atcoder; typedef long long ll; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) static const double pi = 3.141592653589793; const ll INF = 1LL << 60; const ll mod = 1000000007; const ll imod = 998244353; using mint = modint998244353; vector dx = {1, 0, -1, 0}, dy = {0, 1, 0, -1}; ll P(ll x, ll n) { ll ret = 1; while (n > 0) { if (n & 1) ret *= x; x *= x; n >>= 1; } return ret; } void seek(bool f){ cout << (f ? "Yes" : "No") << endl; } int main(){ string s; cin >> s; ll N = (ll)s.size(); vector cnt(10, 0); rep(i, N){ cnt[s[i] - '0']++; } if(cnt[0] == N){ cout << 1 << endl; } vector fact(N + 1, 0), inv(N + 1, 0), fact_inv(N + 1, 0); fact[0] = fact[1] = 1; fact_inv[0] = fact_inv[1] = 1; inv[1] = 1; for(int i = 2; i <= N; i++){ fact[i] = fact[i - 1] * i; inv[i] = imod - inv[imod % i] * (imod / i); fact_inv[i] = fact_inv[i - 1] * inv[i]; } if(cnt[0] == N){ cout << 1 << endl; } else{ mint ans = 0; for(ll i = 1; i <= 9; i++){ mint res = fact[N - 1]; for(ll j = 0; j <= 9; j++){ res *= fact_inv[cnt[j] - (i == j ? 1 : 0)]; } ans += res; } cout << ans.val() << endl; } }