#include #include using namespace std; using ll = long long; ll mod = 998244353; int main() { string N; cin >> N; ll len = N.size(); bool inc_8 = false; vector> dp(len, vector(2, 0)); // 0 も含めて数えて OK if (N[0] == '8') { inc_8 = true; dp[0][0] = 8; } else if (N[0] == '9') { dp[0][0] = 8; dp[0][1] = 1; } else { dp[0][0] = (ll)(N[0] - '0'); } for (ll i = 1; i < len; i++) { if (N[i] == '8') { inc_8 = true; } // テーブル内の遷移 dp[i][0] = (dp[i - 1][0] * 9) % mod; dp[i][1] = (dp[i - 1][0] + dp[i - 1][1] * 10) % mod; // テーブルに新たに入ってくる遷移 ll cnt_0, cnt_1; if (N[i] == '9') { cnt_0 = 8; cnt_1 = 1; } else { cnt_0 = (ll)(N[i] - '0'); cnt_1 = 0; } if (inc_8) { dp[i][1] += (cnt_0 + cnt_1); dp[i][1] %= mod; } else { dp[i][0] = (dp[i][0] + cnt_0) % mod; dp[i][1] = (dp[i][1] + cnt_1) % mod; } } ll plus = (inc_8); cout << (dp[len - 1][1] + plus) % mod << endl; }