#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; typedef unsigned long long ULL; #define MEM(a,b) memset((a),(b),sizeof(a)) const LL INF = 1e9 + 7; const int N = 1e6 + 10; const int mod = 998244353; LL dp[N][2]; LL solve(string& str, int pos, int flag = 0, bool limit = true, bool lead = true) { if (pos == -1) { return flag; } if (!limit && !lead && dp[pos][flag] != -1) return dp[pos][flag]; int up = limit ? str[pos] - '0' : 9; LL ret = 0; for (int i = 0; i <= up; i++) { ret += solve(str, pos - 1, flag || i == 8, limit && i == str[pos] - '0', lead && i == 0); } ret %= mod; if (!limit && !lead) dp[pos][flag] = ret; return ret; } int main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); MEM(dp, -1); string str; cin >> str; cout << solve(str, str.length() - 1) << endl; return 0; }