use proconio::{input, marker::Chars}; use std::iter; fn main() { input! { n: Chars } let pos3 = n.iter().position(|&x| x == '3'); let rem = n[..pos3.unwrap_or(n.len())].iter().map(|&c| c as usize - '0' as usize).sum::() % 3; match pos3 { Some(pos3) if pos3 == n.len() - 1 => { if rem == 1 { println!("{}1", n[..pos3].iter().collect::()) } else { println!("{}2", n[..pos3].iter().collect::()) } }, Some(pos3) => { println!("{}2{}{}", n[..pos3].iter().collect::(), iter::repeat('9').take(n.len() - pos3 - 2).collect::(), if rem == 1 { '8' } else { '9' }); }, None if rem % 3 != 0 => println!("{}", n.into_iter().collect::()), None => { let last_not0_pos = n.iter().rposition(|&x| x != '0').unwrap(); println!("{}{}{}", n[..last_not0_pos].iter().collect::(), n[last_not0_pos] as usize - '0' as usize - 1, iter::repeat('9').take(n.len() - last_not0_pos - 1).collect::()); } } }