use proconio::{input, marker::Chars}; const MOD: usize = 998244353; fn main() { input! { N: Chars, } let N = N.into_iter().map(|x| x.to_digit(10).unwrap() as usize ).collect::>(); fn trans(state: usize, digit: usize) -> usize { match (state, digit) { (0, 4) => 1, (1, 0) => 2, (1, 4) => 1, (2, 4) => 3, _ => 0 } } let mut eq = [0; 4]; let mut lt = [0; 4]; eq[0] = 1; for digit in N { let mut eq_next = [0; 4]; let mut lt_next = [0; 4]; // lt -> lt for d in 0 ..= 9 { for state in 0 .. 3 { let state_next = trans(state, d); lt_next[state_next] += lt[state]; lt_next[state_next] %= MOD; } } // eq -> lt for d in 0 .. digit { for state in 0 .. 3 { let state_next = trans(state, d); lt_next[state_next] += eq[state]; lt_next[state_next] %= MOD; } } // eq -> eq { let d = digit; for state in 0 .. 3 { let state_next = trans(state, d); eq_next[state_next] += eq[state]; eq_next[state_next] %= MOD; } } eq = eq_next; lt = lt_next; } let ans = (eq[0] + eq[1] + eq[2] + lt[0] + lt[1] + lt[2] + MOD - 1) % MOD; println!("{ans}"); }