MOD = 998244353 S = list(map(int,list(input()))) N = len(S) FZF = [4,0,4] 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(S[n]+1): next_NG = NG+1 if i == FZF[NG] else 1 if i == 4 else 0 ret += f(n+1, next_NG, i == 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 for i in range(N): for j in range(3): for k in range(2): f(i,j,k) print((f(0, 0, True) - 1) % MOD)