import pypyjit pypyjit.set_param("max_unroll_recursion=-1") import sys sys.setrecursionlimit(10**6 + 100) MOD = 998244353 S = input() N = len(S) FZF = "404" memo = [[[-1,-1] for _ in range(3)] for _ in range(N)] def f(n, NG, giri): if(NG == 3):return 0 if(n == N):return 1 if(memo[n][NG][giri] != -1):return memo[n][NG][giri] ret = 0 if(giri): for i in range(int(S[n])+1): next_NG = NG+1 if i == int(FZF[NG]) else 1 if i == 4 else 0 ret += f(n+1, next_NG, i == int(S[n])) ret %= MOD else: if(NG == 0): ret += f(n+1, 0, False) * 9 ret += f(n+1, 1, False) ret %= MOD elif(NG == 1): ret += f(n+1, 0, False) * 8 ret += f(n+1, 1, False) ret += f(n+1, 2, False) ret %= MOD else: ret += f(n+1, 0, False) * 9 ret %= MOD memo[n][NG][giri] = ret return ret print((f(0, 0, True) - 1) % MOD)